PlayerFSM 스크립트를 열고 각각의 상태가 되면 자동으로 실행되는 함수들을 별도로 만들어 보겠습니다
public class PlayerFSM : MonoBehaviour
{
public enum State
{
Idle,
Move,
Attack,
AttackWait,
Dead
}
//idle 상태를 기본 상태로 지정
public State currentState = State.Idle;
//마우수 클릭 지점,플레이어가 이동할 목적지의 좌표를 저장할 예정
Vector3 curTargetPos;
public float rotAnglePerSecond = 360f; //1초에 플레이어의 방향을 360도 회전한다
public float moveSpeed = 2f; //초당 2미터의 속도로 이동
PlayerAni myAni;
void Start()
{
myAni = GetComponent<PlayerAni>();
ChangeState(State.Idle, PlayerAni.ANI_IDLE);
}
void ChangeState(State newState, int aniNumber)
{
if (currentState == newState)
{
return;
}
myAni.ChangeAni(aniNumber);
currentState = newState;
}
//캐릭터의 상태가 바뀌면 어떤 일이 일어날지 를 미리 정의
void UpdateState()
{
switch (currentState)
{
case State.Idle:
IdleState();
break;
case State.Move:
MoveState();
break;
case State.Attack:
AttackState();
break;
case State.AttackWait:
AttackWaitState();
break;
case State.Dead:
DeadState();
break;
default:
break;
}
}
void IdleState()
{
}
void MoveState()
{
TurnToDestination();
MoveToDestination();
}
void AttackState()
{
}
void AttackWaitState()
{
}
void DeadState()
{
}
//MoveTo(캐릭터가 이동할 목표 지점의 좌표)
public void MoveTo(Vector3 tPos)
{
curTargetPos = tPos;
ChangeState(State.Move, PlayerAni.ANI_WALK);
}
void TurnToDestination()
{
// Quaternion lookRotation(회전할 목표 방향) : 목표 방향은 목적지 위치에서 자신의 위치를 빼면 구함
Quaternion lookRotation = Quaternion.LookRotation(curTargetPos - transform.position);
//Quaternion.RotateTowards(현재의 rotation값, 최종 목표 rotation 값, 최대 회전각)
transform.rotation = Quaternion.RotateTowards(transform.rotation, lookRotation, Time.deltaTime * rotAnglePerSecond);
}
void MoveToDestination()
{
//Vector3.MoveTowards(시작지점, 목표지점, 최대 이동거리)
transform.position = Vector3.MoveTowards(transform.position, curTargetPos,moveSpeed * Time.deltaTime);
//플레이어의 위치와 목표지점의 위치가 같으면, 상태를 Idle 상태로 바꾸라는 명령
if (transform.position == curTargetPos)
{
ChangeState(State.Idle, PlayerAni.ANI_IDLE);
}
}
void Update()
{
UpdateState();
}
}
CameraControl 스크립트를 새로 만들고 CameraControl 스크립트를 Main Camera에 붙입니다
Main Camera에 붙입니다
//CameraControl 스크립트 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraControl : MonoBehaviour
{
public Transform player;
Vector3 offset;
// Start is called before the first frame update
void Start()
{
offset = player.position - transform.position;
}
//카메라가 플레이어 움직임에 한 템포 늦게 움직임을 준다
void LateUpdate()
{
//플레이어의 위치와 카메라의 위치를 최초 저장한 위치 차이만큼 자동으로 유지시켜주게 됨
transform.position = player.position - offset;
}
}
CameraControl 스크립트 작성하고 Player 오브젝트를 드래그하여 inspector 변수에 넣습니다
게임을 실행시키면 카메라가 플레이어를 따라가는 것을 확인할 수 있습니다
'게임 만들기 강좌 > 유니티 3D RPG 게임만들기' 카테고리의 다른 글
unity 유니티 게임 만들기 RPG 게임만들기 9 적 공격 함수 만들기 (0) | 2019.07.01 |
---|---|
unity 유니티 게임 만들기 RPG 게임만들기 8 적 Enemy 만들기 셋업 (0) | 2019.06.29 |
unity 유니티 게임 만들기 RPG 게임만들기 6 Player 이동 하기 캐릭터 이동 시키기 (4) | 2019.06.27 |
unity 유니티 게임 만들기 RPG 게임만들기 5 PlayerFSM 및 PlayerAni (0) | 2019.06.26 |
unity 유니티 게임 만들기 RPG 게임만들기 4 캐릭터 FMS 및 add Animation (2) | 2019.06.25 |