2부는 대부분 C++이나 Java에서 이용하는 클래스 타입에 대한 설명이어서 건너뛰었다.
오늘은 유니티에서 간단한 예제를 시작해보도록 하겠다.
해당 예제를 만들기 위해 Dodge라는 프로젝트를 만들었다.
- 바닥 Plane 게임 오브젝트 만들기 (Hierarchy 창 > Create > 3D object > Plane)
+ Transform 컴포넌트에서 position은 (0,0,0) scale은 (2,1,2)로 변경 + 프로젝트 창에서 Create > Material을 추가하여 Plane Color를 알베도 (0,0,0)으로 설정하여 Plane 오브젝트에 추가
- 벽 Cube 게임 오브젝트 4개 만들기 (Hierarchy 창 > Create > 3D object > Cube)
+ Cube 오브젝트의 이름을 Wall로 바꾸기 + 프로젝트 창에서 Create > Material을 추가하여 Wall Color를 알베도 (255,255,255)으로 설정하여 Wall 오브젝트에 추가 + Ctrl+D로 Wall, Wall(1), Wall(2), Wall(3) 생성 + Transform 컴포넌트에서 각각 position과 scale 설정
- 레벨 Level 게임 오브젝트 만들기(Hierarchy 창 > Create > Create Empty)
+ Level 게임 오브젝트의 위치를 Reset (Position을 (0,0,0)으로 만들기) + Plane과 Wall 오브젝트들을 모두 선택하여 Level의 하위로 드래그&드롭
- 카메라 위치 변경(Hierarchy 창의 Main Camera 선택)
+ Main Camera의 Position을 (0,15,-10), Rotation을 (60,0,0)으로 변경
- 카메라의 배경 변경
+ Main Camera 오브젝트의 Camera 컴포넌트에서 Clear Flags의 값을 Solid Color로 변경 + Background의 컬러 필트에서 RGB 컬러를 (36,36,36)으로 변경
- 플레이어가 될 Player 게임 오브젝트 생성(Hierarchy 창 > Create > 3D object > Capsule)
+ Capsule 오브젝트의 이름을 Player로 바꾸기 + Player 게임 오브젝트의 Position을 (0,1,0)으로 변경 + 프로젝트 창에서 Create > Material을 추가하여 Player Color를 알베도 (0,100,164)로 설정하여 Player 오브젝트에 추가
- Player 오브젝트에 Rigidbody 컴포넌트 설정 (Inspector 창 > Add Component > Physics > Rigidbody)
+ Inspectior 창 > Constraints 필드 펼치기 > Freeze Position은 Y만, Freeze Rotation은 X,Z 체크
이 두 기능을 가진 PlayerController 스크립트 준비
사용자의 키보드 입력 감지
Rigidbody를 사용하여 Player 게임 오브젝트 움직이기
- PlayerController 스크립트 생성(Project 창 > Create > C# Script)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public Rigidbody playerRigidbody; //이동에 사용할 리저드바디 컴포넌트
public float speed = 8f; //이동 속력
void Start()
{
}
void Update()
{
if(Input.GetKey(KeyCode.UpArrow) == true) //위쪽 방향키 입력이 감지된 경우 z방향 힘 주기
{
playerRigidbody.AddForce(0f, 0f, speed);
}
if (Input.GetKey(KeyCode.DownArrow) == true) //위쪽 방향키 입력이 감지된 경우 -z방향 힘 주기
{
playerRigidbody.AddForce(0f, 0f, -speed);
}
if (Input.GetKey(KeyCode.RightArrow) == true) //위쪽 방향키 입력이 감지된 경우 x방향 힘 주기
{
playerRigidbody.AddForce(speed, 0f, 0f);
}
if (Input.GetKey(KeyCode.LeftArrow) == true) //위쪽 방향키 입력이 감지된 경우 -x방향 힘 주기
{
playerRigidbody.AddForce(-speed, 0f, 0f);
}
}
public void Die() //게임 오브젝트 비활성화
{
gameObject.SetActive(false);
}
}
- PlayerController 스크립트를 Player 게임 오브젝트에 추가
+ PlayerController 스크립트를 Hierarchy창의 Player 게임 오브젝트로 드래그&드롭 + Rigidbody 컴포넌트를 playerRigidbody에 할당