오늘 학습 키워드
공격 처리
오늘 학습 한 내용을 나만의 언어로 정리하기
개인 프로젝트 피드백 (드디어!)
- Github에 다이어그램 등으로 정리하는 습관 굿
- 커밋 컨벤션, 커밋 로그 좀 더 신경써보기
- GameManager 책임 너무 많음
- 씬마다 자신의 타입을 알고있게 하는 것도 방법
BulletShooter
원형 공격 말고 다른 공격은 어떻게 처리하는가
- Physics.OverlabBox 쓰기
// 예제
Vector3 center = transform.position + transform.forward * range * 0.5f; // 직선 방향 앞으로 이동
Vector3 halfExtents = new Vector3(width / 2f, height / 2f, range / 2f); // 충격박스의 반지름
Quaternion orientation = transform.rotation; // 캐릭터가 바라보는 방향 유지
Collider[] hits = Physics.OverlapBox(center, halfExtents, orientation, enemyLayer);
foreach (Collider hit in hits)
{
var target = hit.GetComponent<Enemy>();
if (target != null)
{
target.TakeDamage(damage);
}
}
값 | 설명 |
---|---|
range | 공격 거리 |
width | 좌우 범위 |
height | 위아래 높이 |
원뿔형이라면?
- Physics.OverlapSphere + Vector3.Angle
// 예제
void DealConeDamage(Vector3 origin, Vector3 forward, float radius, float angle, LayerMask targetLayer)
{
Collider[] hits = Physics.OverlapSphere(origin, radius, targetLayer);
foreach (Collider hit in hits)
{
Vector3 dirToTarget = (hit.transform.position - origin).normalized;
float angleToTarget = Vector3.Angle(forward, dirToTarget);
if (angleToTarget <= angle * 0.5f)
{
// 범위 안에 들어옴
var enemy = hit.GetComponent<Enemy>();
if (enemy != null)
{
enemy.TakeDamage(50); // 예시 데미지
}
}
}
}
이름 | 설명 |
---|---|
origin | 스킬 시전 위치 |
forward | 시전 방향 |
radius | 스킬 최대 거리 |
angle | 부채꼴 각도 |
TextRPG
콘솔의 크기가 너무 작으면 오류가 생김
- 보니까 Console.SetCursorPosition() 쪽에서 에러를 내는 것을 확인함.
public static void ShowAsciiWithCombatUI(BossClass.Boss asciiBoss, Player player)
{
...
int minHeight = asciiHeight + 10; // 여유 공간 포함
int minWidth = rightStartX + 20;
bool isHidden = asciiBoss.Name == "최강 7조";
while (Console.WindowWidth < minWidth || Console.WindowHeight < minHeight)
{
Console.Clear();
Console.SetCursorPosition(0, 0);
Console.WriteLine("⚠ 창이 너무 작습니다. 창 크기를 늘려주세요.");
Console.WriteLine($"필요: 너비 {minWidth}, 높이 {minHeight} 이상");
Thread.Sleep(1000); // 1초 후 다시 검사
}
...
...
그래서 while로 체크하고 넘어가도록 함
내일 학습 할 것은 무엇인지
이제 발표하고 끝내야죠…