728x90
가장 먼저 Guard 스크립트에 대해서 설명하겠다.
1
2
3
4
5
6
7
8
9
10
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Guard : MonoBehaviour
{
public float speed = 5f;
public float waitTime = 0.3f;
public Transform pathHolder;
|
Guard를 움직이기 위해 필요한 변수들이다.
- speed - 움직이는 속도 값을 가지고 있는 변수이다.
- waitTime - 다음 지점으로 가기 전에 잠깐 기다리는 시간을 가지고 있는 변수이다.
- pathHolder - Guard가 움직이는 지점에 대한 정보를 가지고 있다.
1
2
3
4
5
6
7
8
9
10
11
|
void Start()
{
Vector3[] waypoints = new Vector3[pathHolder.childCount];
for(int i = 0; i < waypoints.Length; i++)
{
waypoints[i] = pathHolder.GetChild(i).position;
waypoints[i] = new Vector3(waypoints[i].x, transform.position.y, waypoints[i].z);
}
StartCoroutine(FollowPath(waypoints));
}
|
waypoints라는 벡터3 배열을 만들어서 pathHolder의 자식들의 위치를 초기화시켜준다. 이때 8행에서 새로운 벡터 3을 만들어서 위치를 다시 초기화시켜주는 이유는 y좌표를 transform.position.y로 해주지 않으면 Guard의 몸이 반은 바닥 밑을 반은 바닥 위를 지나가는 현상을 볼 수 있기 때문이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
IEnumerator FollowPath(Vector3[] waypoints)
{
transform.position = waypoints[0];
int targetwaypointIndex = 1;
Vector3 targetWaypoint = waypoints[targetwaypointIndex];
while (true)
{
transform.position = Vector3.MoveTowards(transform.position, targetWaypoint, speed * Time.deltaTime);
if(transform.position == targetWaypoint)
{
targetwaypointIndex = (targetwaypointIndex + 1) % waypoints.Length;
targetWaypoint = waypoints[targetwaypointIndex];
yield return new WaitForSeconds(waitTime);
}
yield return null;
}
}
|
이번에는 FollowPath IEnumerator를 사용하여 Guard를 움직여보겠습니다. Update함수를 사용하는 것보다 메모리를 적게 사용한다고 해서 IEnumerator를 사용했습니다.
FollowPath에서 가장 중요한 부분은 13행의 코드이다. 이 부분을 통해서 targetwaypointIndex는 절대로 waypoints.Length를 넘지 않아서 별다른 설정이 없는 이상 무한으로 반복하여 waypoints를 돌게 된다.
코드를 작성하고 위의 사진처럼 Hierarchy를 설정해주고 Waypoint를 원하는 위치에 설정해주면 결과 화면과 같은 Guard의 움직임을 볼 수 있다.
오늘은 간단하게 IEnumerator를 사용하여 개발자가 설정해놓은 위치를 따라서 움직이게 해주었다.
728x90
'Project > 도둑과 경호원' 카테고리의 다른 글
[도둑과 경호원] Unity: Guard 플레이어 검거하기 (0) | 2020.05.05 |
---|---|
[도둑과 경호원] Unity: Player 회전과 이동 (0) | 2020.05.04 |
[도둑과 경호원] Unity: Guard 기즈모 (0) | 2020.05.03 |
[도둑과 경호원] Unity: Guard 회전하기 (0) | 2020.05.02 |
[도둑과 경호원] Unity: 게임 기획 (0) | 2020.04.30 |