
- 주제
>> 플레이어를 중심으로 원형을 그리며 포위하고 있는 적 생성
>> 적 비행기 방향 설정(플레이어를 바라봄)
- 공부내용
1. 플레이어를 중심으로 원형을 그리며 포위하고 있는 적 생성
1-1. 360도를 적 비행기 수로 등분하여 배치(원형배치)
1-2. 현재 적 비행기가 배치될 각도를 계산하고 라디안으로 변환
: 삼각함수 Mathf.Cos 와 Mathf.Sin 을 사용하기 위해 각도를 라디안으로 변환시킴.
[변환방법] 각도 * Mathf.Deg2Rad(1도가 몇 라디안인지 나타내는 값)
1-3. 적 비행기의 위치 계산
Mathf.Cos 함수: 각도에 대한 삼각함수 코사인 값을 반환
(적 비행기가 x축으로 얼마나 멀리 떨어져 있는지를 나타낸다.
각도가 증가함에 따라 코사인 값은 1에서 -1까지 변화한다.
코사인 값이 0일 때, 즉 각도가 90도나 270도일 때, 적 비행기는 플레이어와 동일한 y축에 위치한다.)
Mathf.Sin 함수: 각도에 대한 삼각함수 사인 값을 반환
(적 비행기가 y축으로 얼마나 멀리 떨어져 있는지를 나타낸다.
각도가 증가함에 따라 사인 값은 1에서 -1까지 변화한다.
사인 값이 0일 때, 즉 각도가 0도나 180도일 때, 적 비행기는 플레이어와 동일한 x축에 위치한다.)
void GenerateEnemies()
{
// 360도를 적 비행기 수로 등분하여 배치
float angle = 360f / enemyCount;
for (int i = 0; i < enemyCount; i++)
{
// 현재 각도 계산
float currentAngle = i * angle;
// 각도를 라디안으로 변환
float radianAngle = currentAngle * Mathf.Deg2Rad;
// 적 비행기의 위치 계산
Vector2 enemyPos = player.position + new Vector3(Mathf.Cos(radianAngle), Mathf.Sin(radianAngle)) * radius;
// 적 비행기 생성
GameObject enemy = Instantiate(enemyPrefab, enemyPos, Quaternion.identity);
}
}
2. 플레이어를 바라보도록 적 비행기 방향 설정
// 플레이어를 향하는 방향 벡터 계산
Vector2 direction = ((Vector2)player.position - enemyPos).normalized;
// 적 비행기의 방향 설정
enemy.transform.up = direction;
*벡터 = 크기 + 방향
player.position : 플레이어의 위치를 나타내는 벡터
enemyPos : 적 비행기의 위치를 나타내는 벡터(위에서 계산)
((Vector2)player.position - enemyPos).normalized : 적 비행기가 바라봐야할 방향
Q: player.position 앞에 Vector2가 추가된 이유?
A: 유니티 Transform은 3차원 벡터를 사용하므로,
3차원 벡터를 2차원 벡터로 변환하여 연산의 결과를 얻기 위함이다.
(산술 계산을 간소화하고 정확도를 높이기 위해)
Q: normalized 함수를 사용한 이유?
A: 적 비행기가 바라봐야할 방향만 구하면 되므로,
normalized 함수를 사용하여 방향만 남기고 크기를 1로 만들어준다.(단위 벡터로 정규화)
'🌐 유니티 (Unity)' 카테고리의 다른 글
Day 29 - 락 오브젝트(동기화작업 / 코루틴이나 잡시스템과 사용 가능) (1) | 2024.05.23 |
---|---|
Day 28 - OnBecameInvisible 메서드(화면을 벗어난 총알 제거) (1) | 2024.05.17 |
Day 26 - Player Input System을 이용한 이동 및 점프 구현 (12) | 2024.05.14 |
Day 25 - 아크탄젠트(마우스 위치로 회전, 총알 발사 방향 설정 등) (1) | 2024.05.13 |
Day 24 - C# (인스턴스 생성자 예제 1, 2) (0) | 2024.05.11 |