2016. 4. 15. 17:11
https://blog.naver.com/nagne2011/220684231879
먼저 플레이어의 위치를 잡아준다
1
2
3
4
|
//플레이어 셋팅
int _playerPos = 2 * (( GameManager.Instance._tiledNum-1)/2) * ((( GameManager.Instance._tiledNum -1 ) /2 ) + 1);
this.transform.position = GameManager.Instance._tiless [_playerPos].transform.position + new Vector3 (0, 1, 0);
_anim = this.gameObject.GetComponentInChildren<Animator> ();
|
cs |
어라 길다..
static으로 선언된 게임매니저에서 타일 갯수를 받아온뒤
해당 갯수로 만들어진 갯수x갯수 매트릭스의 중앙을 구하는 공식으로 플레이어가 위치할 중앙 큐브의 위치를 구한다
공식은 친구가 뽑아줬다
n이 홀수일때, nxn으로 이루어진 매트릭스의 중앙의 숫자값이다
식으로 표현하면 {(n-1)/2} * [{(n-1)/2}+1] 이다
그리고 해당 큐브의 위치값 + y축으로(위로) 1칸 위에 플레이어 큐브를 위치시켜준다
그다음 적 셋팅을 플레이어 스크립트에서 해준다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//적 셋팅
int num = Random.Range(1, _enemyCounter+1);
//int num = 3;
for (int i = 0; i < num; i++) {
int RndX = Random.Range (0, GameManager.Instance._tiledNum);
int RndY = Random.Range (0, GameManager.Instance._tiledNum);
if ((RndX == this.transform.position.x && RndY == this.transform.position.z)) {
i--;
continue;
}
Vector3 _pos = new Vector3 (RndX, 0.5f, RndY);
GameObject _em = Instantiate (_enemy, _pos, Quaternion.identity) as GameObject;
_em.transform.SetParent (_enemyParent.transform);
_em.gameObject.name = "Enemy_" + i;
_enemys [i] = _em;
}
|
cs |
매 생성마다 (1~max)만큼의 적을 생성한뒤,
임의의 위치에 생성시키는데, 만약 플레이어와 겹칠 경우 다시 생성해준다 (몬스터끼리는 겹쳐도 상관없다)
그리고 해당 적들은 빈 오브젝트의 하위로 담아주고, 이름을 규격화 한뒤 배열에 담아준다 (관리가 편하도록)
그다음은 행동을 관리하는 함수중 하나다
1
2
3
4
5
6
7
8
9
10
|
public void MoveUP()
{
if (this.transform.position.z < GameManager.Instance._tiledNum - 2)
{
_anim.SetBool ("move", true);
Modeling.transform.rotation = Quaternion.Euler (new Vector3 (0, 0, 0));
end = new Vector3 (0, 0, 1) + this.transform.position;
_isMoveUP = true;
}
}
|
cs |
아까 게임매니저에서 moveUP함수를 실행하면,
일단 타일 범위 내에 있는지 확인한뒤
move애니메이션을 실행시키고(Trigger)
해당 방향으로 회전한뒤
도착할 방향을 저장한뒤(end)
_isMoveUp을 true로 잡아준다
1
2
3
4
5
6
7
8
9
10
11
12
|
void Update ()
{
if (_isMoveUP)
{
this.transform.Translate (0, 0, 0.1f);
if (this.transform.position == end)
{
_anim.SetBool ("move", false);
_isMoveUP = false;
EnemyAction();
}
}
|
cs |
그다음 Update에서 아까 활성화된 bool값을 받아온다
일단 해당 목표로 0.1f의 속도로 이동하는데,
현재 위치가 end와 같을경우, 즉 도착했을 경우 이동애니메이션을 종료하고, 이동을 종료한뒤
'그다음 적 유닛의 행동을 실행시킨다"
바로 이것때문에 적 셋팅을 플레이어 위치에서 해줬다
턴방식이기 때문에, 나의 행동이 끝난뒤 적 행동이 시작되는 순서로 가야되기때문에
그 순서를 잡는게 너무 복잡해서 로직을 일자무식하게 짜놨다
즉, 게임매니저 - 플레이어 - 적케릭터 순서로 스크립트가 순차적으로 실행되서
턴방식으로 보이게끔 했다
'유니티 > 실습' 카테고리의 다른 글
주말 숙제 - 퍼즐아케이드 - 5 - 카드 뽑기, 선택 (0) | 2022.02.14 |
---|---|
주말 숙제 - 퍼즐아케이드 - 4 - 적 케릭터 & 정리 (0) | 2022.02.14 |
주말 숙제 - 퍼즐아케이드 - 2 - 기본시스템을 만들자 (0) | 2022.02.14 |
주말 숙제 - 퍼즐아케이드 - 1 - 기획 (0) | 2022.02.14 |
주말 숙제 - FPS+TD - 5 - 완성 (0) | 2022.02.13 |