반응형
해당 프로젝트는 패스트캠퍼스의 게임 제작 올인원 패키지 Online을 바탕으로 진행하였습니다.
게시물을 올리는게 문제가 될 시 게시물을 내리도록 하겠습니다.
이번 시간에는 캐릭터를 맵에 추가하고 캐릭터를 이동하는 코드를 작성해보도록 하겠습니다.
유니티 하이라키 뷰에 준비해놓은 에셋에 있는 캐릭터를 추가합니다.
캐릭터를 이동시키기 위한 코드를 스크립트에 작성합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
public class FighterControl : MonoBehaviour
{
[Header("이동관련속성")]
public float MoveSpeed = 2.0f;
public float RunSpeed = 3.5f;
public float DirectionRotateSpeed = 100.0f; // 이동방향 변경을 위한 속도
public float BodyRotateSpeed = 2.0f; // 몸통의 방향을 변경하기 위한 속도
[Range(0.01f, 5.0f)]
public float VelocityChangeSpeed = 0.1f;
private Vector3 CurrentVelocity = Vector3.zero;
private Vector3 MoveDirection = Vector3.zero;
private CharacterController myCharacterController = null;
private CollisionFlags collisionFlags = CollisionFlags.None;
// Start is called before the first frame update
void Start()
{
myCharacterController = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
Move();
}
void Move()
{
Transform CameraTransform = Camera.main.transform; // 메인카메라 게임오브젝트의 트랜스폼 컴포넌트
Vector3 forward = CameraTransform.TransformDirection(Vector3.forward); // 카메라가 바라보는 방향이 월드상에서는 어떤 방향인지 얻어옴
forward.y = 0.0f;
Vector3 right = new Vector3(forward.z, 0.0f, -forward.x);
float vetical = Input.GetAxis("Vertical");
float horizontal = Input.GetAxis("Horizontal");
Vector3 targetDirection = horizontal * right + vetical * forward; // 이동하고자 하는 방향
MoveDirection = Vector3.RotateTowards(MoveDirection, targetDirection, DirectionRotateSpeed * Mathf.Deg2Rad * Time.deltaTime, 1000.0f);
MoveDirection = MoveDirection.normalized;
float speed = MoveSpeed;
if (myState == FighterState.Run) speed = RunSpeed;
Vector3 moveAmount = (MoveDirection * speed * Time.deltaTime); // 이번 프레임에 움직일 양
collisionFlags = myCharacterController.Move(moveAmount); // 실제 이동
}
}
|
cs |
스크립트를 작성한 후 캐릭터에 해당하는 오브젝트에 추가하고 게임을 실행해보면
위 영상과 같이 캐릭터가 움직이는 것을 확인할 수 있습니다!
하지만 정면만 바라보고 있는 모습이 너무 딱딱해 보이는군요!
몸통을 움직이는 방향을 바라보도록 코드를 추가해보록 하겠습니다.
1
2
3
4
5
6
7
8
9
|
void BodyDirectionChange()
{
if(GetVelocitySpeed() > 0.0f)
{
Vector3 newFoward = myCharacterController.velocity;
newFoward.y = 0.0f;
transform.forward = Vector3.Lerp(transform.forward, newFoward, BodyRotateSpeed * Time.deltaTime);
}
}
|
cs |
해당 코드를 스크립트에 추가한 후 Update에 함수를 호출시키면 됩니다.
그렇게 하면...!
해당 영상처럼 자신이 움직이는 방향으로 몸을 돌리게 됩니다!
다음시간에는 자연스러운 이동을 할 수 있도록 애니메이션을 추가해보도록 하겠습니다.
반응형
'게임 개발 > 간단한 RPG 게임 만들기' 카테고리의 다른 글
[간단한 RPG 게임 만들기] 캐릭터 애니메이션 추가하기 (0) | 2021.01.01 |
---|---|
[간단한 RPG 게임 만들기] 맵에 나무 및 잔디 추가하기 (0) | 2020.11.12 |
[간단한 RPG 게임 만들기] 맵 제작 (0) | 2020.11.11 |