
private IEnumerator 코루틴이름()
{
//15개 생성할거니까 15, 간격은 2정도
CreateMagicPosWithInterval(15, 2f)
}
private void CreateMagicPosWithInterval(int count, float interval)
{
//플레이어 위치에서 살짝 떨어진 y값 4와 z값 -1
Vector3 centerPos = playerController.transform.position + new Vector3(0f , 4f, -1f);
List<Vector3> positions = new List<Vector3>();
for (int i = 0; i < 6; i++)
{
positions.Add(centerPos + new Vector3((i - 2.5f) * interval, 0, -interval));
}
for (int i = 0; i < 5; i++)
{
positions.Add(centerPos + new Vector3((i - 2f) * interval, 0, 0));
}
for (int i = 0; i < 4; i++)
{
positions.Add(centerPos + new Vector3((i - 1.5f) * interval, 0, interval));
}
foreach (var pos in positions)
{
Transform magicPos = Instantiate(megidoPosPrefab, pos, Quaternion.identity);
magicPosition.Add(magicPos);
}
}
간단하게 메기도를 발사할 Pos를 줄어드는 형태 및 일정한 간격으로 만들었다.
Pos를 플레이어의 위치에서 첫번째 줄엔 6개, 두 번째 줄 5개, 세 번째 줄 4개로 생성할것. (총 15개)
여기서 (i - 숫자f) * interval(간격);을 설명해보자면
첫번째 줄에서 생성하는 6개의 포인트는 0부터 5까지 i를 반복하는데, -숫자f를 하지않고
(i * interval)을 한다면 포인트가 0부터 시작하므로 플레이어의 오른쪽으로 확장될것입니다.
저는 포인트를 중심에 가깝게 만들고 싶으므로 -2.5f를 사용해 6개의 포이느가 중심을 기준으로 균등하게했습니다.
for(i = 0, i < 6; i++)
{
for문이 반복되는데
i = 0 - 2.5f = 첫 번째 생성위치 = -2.5f
i = 1 - 2.5f = 두 번째 생성위치 = -1.5f
...2, 3, 4
i = 5 - 2.5f = 다섯 번째 생성위치 = 2.5f
}
이 생성위치에 interval(간격)을 곱하므로 균등하게 생성을 할수있게된다.
두 번째 -interval,0, interval 값은 z값인데 15개 (6 + 5 + 4) 세 줄로 나타낼것이므로 간격을 준것이다.
이제 그리드 형태로 플레이어 중심 주변에 균등히 배치됩니다.

'Unity Engine > Unity 3D.' 카테고리의 다른 글
| [Unity 3D] Creating Monster State Machine (0) | 2023.10.21 |
|---|---|
| [유니티 3D] 메기도 구현 (무한히 튕기는 광선) (1) | 2023.10.21 |
| 유니티 3D 잔상효과 (1) | 2023.10.20 |
| 콤보어택 정리 전 (0) | 2023.10.19 |
| [유니티 3D]몬스터가 플레이어를 추적하고 공격하게 만들어보자 (1) | 2023.10.09 |