오늘 학습 키워드

공격 처리

오늘 학습 한 내용을 나만의 언어로 정리하기

개인 프로젝트 피드백 (드디어!)

  • 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로 체크하고 넘어가도록 함

내일 학습 할 것은 무엇인지

이제 발표하고 끝내야죠…