몇 가지 문제를 개선하자.
1. AddForce를 통해 움직임을 구현한 탓에, 즉각적 방향전환이 안된다.
2. 입력감지코드가 복잡하다. if문 4개보다 더 간단히 하자.
3. playerRigidBody에 Component를 드래그&드롭으로 할당하는게 human-error에 취약하며 불편하다. 코드로 실행하고싶다.
1. Start() 메서드 수정
-> 드래그가 아니라, 코드상에서 RigidBody Component를 Object에 할당하기 위함.
private Rigidbody playerRigidBody;
로 선언하면, 더이상 드래그로 Component를 할당할 수 없다. Inspector 창에 public 아닌 변수는 표시되지 않기 때문이다.
- GetComponent 메서드
- 꺾쇠로 원하는 타입을 받는다. Component가 들어간다.
- 원하는 Component를 자신의 Game Object에서 찾아온다.
- 만약 Game Object에 찾으려는 Component가 없다면 null 반환한다.
public class PlayerController: MonoBehaviour
{
private Rigidbody playerRigidBody;
public float speed = 8f;
void Start()
{
playerRigidBody = GetComponent<Rigidbody>();
}
2. 조작감 개선하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController: MonoBehaviour
{
private Rigidbody playerRigidBody;
public float speed = 8f;
void Start()
{
playerRigidBody = GetComponent<Rigidbody>();
}
void Update()
{
float xInput = Input.GetAxis("Horizontal");
float zInput = Input.GetAxis("Vertical");
float xSpeed = xInput * speed;
float zSpeed = zInput * speed;
Vector3 newVelocity = new Vector3(xSpeed, 0f, zSpeed);
playerRigidBody.linearVelocity = newVelocity;
}
public void Die()
{
Debug.Log("Player died");
gameObject.SetActive(false);
}
}
- Input.GetKey 대신 Input.GetAxis
- WASD 및 방향키에 대응되는 값을 0, 1, -1로 리턴.
- Vector3는 x,y,z 원소를 가진다.
- AddForce가 아니라, velocity를 직접 수정하는걸로 바꾸었다.
- Unity6에선 linearVelocity로 대체해야한다.
TMI) 입력매니저
- Keyboard라면 WASD, 화살표면 되지만, 조이스틱이라면 다른 입력치를 상하좌우에 Mapping 해야한다.
'Development > Unity Engine' 카테고리의 다른 글
[Retro유니티] Bullet Spawner 구현 - Start() (0) | 2024.11.15 |
---|---|
[Retro유니티] Bullet 구현 (1) | 2024.11.13 |
[Retro유니티] Player Object 설계 1 - AddForce를 통한 움직임 구현 (1) | 2024.11.10 |
Unity 프로젝트용 .gitignore (0) | 2024.11.10 |
[Retro유니티] Main Camera 배경 변경 (0) | 2024.11.10 |