패턴 매니저
적의 생성과 배치
이게 맞는 방법인지는 솔직히 모르겠는데, 기즈모 배웠으니까 써먹어보려고요.
빈 게임 오브젝트를 만들어 ==== Pattern1 이라고 이름짓고, 여기 PatternManager라는 스크립트를 새로 만들어 붙입니다.
거기 추가로 40개의 빈 게임 오브젝트를 만들어줍니다. (이전 일지에서는 32개)

이 오브젝트 위치가 적 캐릭터가 나열될 모양이 됩니다.

옛날엔 모눈종이(...)에다 그려서 좌표 땄고,
cocos2d-x에서는 포토샵 같은데서 이미지 배치해서 좌표 수동으로 뽑아 썼는데
이렇게 화면에서 보면서 배치 잡아주고 이 좌표 받아다 쓰게 하는게 목적입니다.
기즈모에 숫자 표시
이전엔 Gizmo.Color와 Gizmo.DrawSphere를 써서 붉은 원을 그려줬는데
붉은 원만으로는 재배치할때 어느게 어느건지 구분이 안가서
Gizmos.DrawGUITexture로 숫자를 써서 어느 오브젝트가 몇 번째인가 알 수 있도록 했습니다.
숫자 이미지는 9*9의 도트 숫자로 이걸 적당히 확대해서 씁니다.

- public Texture[] textures = new Texture[10];
- private void OnDrawGizmos()
- {
- for(int i=0;i< Poses.Length;i++)
- {
- if (i % 10 == 0)
- Gizmos.color = new Color(0.2f, 0.8f, 1f);
- else
- if (i % 10 < 5)
- Gizmos.color = Color.red;
- else
- Gizmos.color = Color.yellow;
- Gizmos.DrawSphere(Poses[i].position, 15f);
- if (textures[0] != null)
- {
- Gizmos.DrawGUITexture(new Rect(Poses[i].position.x - 27f, Poses[i].position.y - 13.5f, 27, -27), textures[i / 10]);
- Gizmos.DrawGUITexture(new Rect(Poses[i].position.x + 0f, Poses[i].position.y - 13.5f, 27, -27), textures[i % 10]);
- }
- }
- }
14~18 : 텍스처 기즈모 그리기 (위치와 크기는 Rect로 지정)
패턴 매니저 스크립트에서, 코루틴으로 적을 생성하면서 개체의 움직임을 제어하는 베지어 곡선의 끝점을 이 좌표로 지정해줍니다.
- IEnumerator CreateEnemy()
- {
- yield return new WaitForSeconds(2f);
- int[] idx = { 0, 1, 1, 1, 1, 2, 2, 2, 2, 2 };
- for (int i = 0; i < 4; i++)
- {
- for (int j = 0; j < 10; j++)
- {
- GameObject Enemy;
- if (Enemies[idx[j]].Count == 0)
- {
- Enemy = Instantiate(Corps[idx[j]]);
- }
- else
- Enemy = Enemies[idx[j]].Dequeue();
- EnemyInfo info = new EnemyInfo();
- info.lifeMax = 4f;
- info.power = 1f;
- info.idx = idx[j];
- info.isFlip = (i % 2 == 1);
- info.finPos = Poses[i * 10 + j];
- Enemy.SetActive(true);
- Enemy.GetComponent<LinerController>().SetUp(this.gameObject, info, null);
- yield return new WaitForSeconds(0.2f);
- }
- yield return new WaitForSeconds(1f);
- }
- }
4 : 생성할 적 종류 지정
20 : 이동 궤도 좌우 반전 여부
21 : 적 캐릭터가 찾아갈 최종점 지정
적 개체별 스크립트에서, 곡선을 따라가는 움직임이 끝나면 배치 좌표로 보정시켜줍니다.
그리고 베지어 곡선의 x좌표를 좌우로 플립시켜서 오른쪽 왼쪽에서 번갈아 나오도록 하고 있습니다.
- if (info.isFlip)
- {
- for (int i = 0; i < 7; i++)
- {
- _wayPoints[i] = new Vector3(_wayPoints[i].x * -1f, _wayPoints[i].y, _wayPoints[i].z);
- }
- }
마지막 도착점을 제외한 좌표만 x좌표에 -1을 곱해 대칭으로 만듭니다.
배치가 완료된 적 편대

멘탈이 아직 회복이 덜 되어서 진도가 멈춰있습니다.. 뭔가 스트레스를 좀 풀어줘야 할텐데.
at 2022/03/11 19:02
덧글