이 글은
https://www.inflearn.com/course/유니티-게임-프로그래밍-에센스
강의를 요약한 강의노트 입니다.
유니티를 처음 접하시는 분들이거나 좀 더 기반을 다지고 싶으신 분들에게 👍강력하게 추천합니다.
⭐️Material
물체의 표면의 컬러를 지정
Shader + texture
Shader : 빛에의해 물체의 표면이 어떻게 보일지를 결정
Texture : 그림파일
Albedo : 물체의 표면 색 지정
Smothness : 물체 표면의 반들반들한 정도, 무광 ~ 유광의 정도
Start()메소드 : 게임이 처음 시작되었을 때 한번 실행되는 메소드
Update()메소드 : 1프레임마다 실행되는 메소드
⚠️ Frame
Frame이란, 1초에 화면이 깜빡이는 횟수
30fps = 1초에 30번 화면이 깜빡인다.
플레이어를 조작하기 위해서 Update()메소드를 사용한다.
❓이유 :
게임은 실시간으로 상황이 계속 바뀐다.
상황에 따라 원하는 조작을 실시간으로 반영시키기 위해서 사용한다.
Rigidbody란, 오브젝트의 물리기능을 추가하는 컴포넌트
오브젝트를 이동시키기 위해서는 Rigidbody를 추가시켜 물리효과를 적용시켜야 한다.
1️⃣ Input.GetKey(KeyCode.(키))
: 키보드 입력을 받아 해당 키가 입력되면 true를 반환한다. 아니면 false
if (Input.GetKey(KeyCode.W))
{
playerRigidbody.AddForce(0, 0, speed);
}
2️⃣ Input.GetAxis("(InputManager)")
GetKey()함수에 Simple함과 커스터마이징을 제공하는 함수
Project Setting -> InputManager를 사용한다.
GetAxis()는 -1.0 ~ 1.0 사이의 값을 리턴
GetAxisRaw()는 -1, 0, 1이 3가지의 값을 리턴한다.
조이스틱과 키보드 두 기계 모두 대응을 하기위해 사용한다.
float inputX = Input.GetAxis("Horizontal");
float inputZ = Input.GetAxis("Vertical");
playerRigidbody.AddForce(inputX * speed, 0, inputZ * speed);
1️⃣ AddForce()
물체의 힘을 전달하는 함수
키보드의 입력값만큼 오브젝트 내부에서 연산을 통해 서서히 힘이 더해져 물체가 이동한다.
관성이 적용되어 움직이기까지 서서히 속도가 증가한다.
float inputX = Input.GetAxis("Horizontal");
float inputZ = Input.GetAxis("Vertical");
playerRigidbody.AddForce(inputX * speed, 0, inputZ * speed);
2️⃣ velocity
물체의 속도를 주는 Vector3형 변수
관성 적용없이 바로 속도를 부여하여 ⚡️빠릿빠릿하게 움직인다!
⚠️주의점
velocity의 경우 오브젝트의 속도를 지정하는 것이다.
예를 들어 낙하하는 물체에 velocity의 값중 y축의 값을 설정하지 않았다면(=0) velocity의 y값과 중력이 서로 맞물리게 되어 원치않는 장면을 볼 수 있다.
float inputX = Input.GetAxis("Horizontal");
float inputZ = Input.GetAxis("Vertical");
float fallSpeed = playerRigidbody.velocity.y;
Vector3 velocity = new Vector3(inputX, 0, inputZ);
velocity *= speed; // (inputX * speed, fallSpeed, inputZ * speed)
velocity.y = fallSpeed; // (inputX * speed, fallSpeed, inputZ * speed)
playerRigidbody.velocity = velocity;
객체지향언어의 특성 중 정보 은닉의 특성이 떨어지게된다.
협업 중 누구나 접근이 가능하므로 에디터를 잘못 건드려 큰 문제가 발생할 수 있다.
GetComponent를 사용하면 오브젝트에 들어있는 컴포넌트중 <>사이에 해당하는 컴퍼넌트를 가져와 초기화한다.
만약 해당 컴포넌트가 없다면 None을 리턴
private Rigidbody playerRigidbody;
void Start()
{
playerRigidbody = GetComponent<Rigidbody>();
}