이 글은
https://www.inflearn.com/course/유니티-게임-프로그래밍-에센스
강의를 요약한 강의노트 입니다.
유니티를 처음 접하시는 분들이거나 좀 더 기반을 다지고 싶으신 분들에게 👍강력하게 추천합니다.

📌초기 씬 구성

⭐️Material
   물체의 표면의 컬러를 지정
   Shader + texture
   Shader : 빛에의해 물체의 표면이 어떻게 보일지를 결정
   Texture : 그림파일
   Albedo : 물체의 표면 색 지정
   Smothness : 물체 표면의 반들반들한 정도, 무광 ~ 유광의 정도

📌플레이어 조작

Start()메소드 : 게임이 처음 시작되었을 때 한번 실행되는 메소드
Update()메소드 : 1프레임마다 실행되는 메소드

⚠️ Frame
Frame이란, 1초에 화면이 깜빡이는 횟수
30fps = 1초에 30번 화면이 깜빡인다.

플레이어를 조작하기 위해서 Update()메소드를 사용한다.
이유 :
게임은 실시간으로 상황이 계속 바뀐다.
상황에 따라 원하는 조작을 실시간으로 반영시키기 위해서 사용한다.

⭐️Rigidbody

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;

❗️Tip.

public으로 변수 선언시 문제점

객체지향언어의 특성 중 정보 은닉의 특성이 떨어지게된다.
협업 중 누구나 접근이 가능하므로 에디터를 잘못 건드려 큰 문제가 발생할 수 있다.

GetComponent<>()

GetComponent를 사용하면 오브젝트에 들어있는 컴포넌트중 <>사이에 해당하는 컴퍼넌트를 가져와 초기화한다.
만약 해당 컴포넌트가 없다면 None을 리턴

private Rigidbody playerRigidbody;
void Start()
{
	playerRigidbody = GetComponent<Rigidbody>();
}
profile
치타가 되고 싶은 취준생

0개의 댓글