1. Hierarchy창에서, 3D Object로 Player Object 생성
2. Project창에서, Material 로 Color 생성
3. Material 색 변경 및 Player에게 부여
- Camera Component의 Clear Flag를 변경하여 게임 변경색을 변경가능하다.
- Clear Flag의 Skybox는 가상의 하늘을 그린다. Solid Color를 통해 단색으로 배경을 채울 수 있다.
4. 탄알 충돌 구현을 위해, Tag 설정
- 탄알입장에서, 충돌한 물체가 Player인지 단순GameObject인지 구분할 구분자가 필요.
- Tag는 Game Object를 분류하고, Code에서 Game Object를 구별하는데 사용된다.
- Code입장에서는, "탄알이 Player Tag를 가진 Object와 충돌했을 때"만 Game Over를 실행시키면 됨.
5. Player Object에 Rigid Body Component 추가
- 이동에는 물리적 힘과 속력이 필요.
- 물리적 상호작용이 가능하게 만들어주는 Component 추가가 필요함.
5-1. 오뚜기가 넘어지는걸 막기 위해, Constraints 추가
- 어떤 축의 위치/회전이 변경되지 않게 고정할 수 있음.
- x, z축은 회전불가능
- y축 선상에서는 이동불가능.
6. Player Script 생성.
-목표: 키보드입력감지 -> 이동하기
6-1. C# Script 생성
- FPS
- 보통 PC게임은 60FPS이다.
- 다만 60FPS는 평균값일 뿐이고, 실제 FPS는 컴퓨터 성능에 따라 가변적이다.
- Update() 메서드는 매 Frame마다 실행된다. 이 Frame의 주기는 컴퓨터 성능에 따라 가변적이다.
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.W) || Input.GetKey(KeyCode.UpArrow))
{
playerRigidBody.AddForce(Vector3.forward * speed);
}
if(Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{
playerRigidBody.AddForce(Vector3.back * speed);
}
if(Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
playerRigidBody.AddForce(Vector3.left * speed);
}
if(Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
playerRigidBody.AddForce(Vector3.right * speed);
}
}
}
7. Die 메서드 추가
- PlayerController 스크립트가 스스로 실행하는 함수가 아님.
- 탄알과 플레이어가 충돌시 실행.
- 탄알과 플레이어가 충돌 시, 탄알이 Player Object의 Die 메서드를 실행한다.
- 따라서, Die 함수는 public으로 선언되어야 한다.
- gameObject 변수
- Component 입장에서, 자신이 추가된 Game Object를 가리키는 변수.
- Monobehaviour에서 제공한다.
- 모든 Component는 gameObject 변수를 통해 자신을 사용중인 GameObject에 접근할 수 있다.
- Component 입장에서, 자신이 추가된 Game Object를 가리키는 변수.
- SetActive 메서드
- 스스로 켜고 끄는 기능을 한다.
- 비활성화된 게임 오브젝트는 씬에서 보이지 않게 된다.
- Inspector창에서 아래 버튼과 효과가 동일하다. 체크해제시 씬에서 사라진다.
7-1. Script를 Object에 적용
8. RigidBody Component를 Script에 적용
- public Rigidbody playerRigidBody; 에 RigidBody Component를 할당시켜줘야, Object가 움직일 수 있다.
9. 동작확인
- 움직인다!
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.W) || Input.GetKey(KeyCode.UpArrow))
{
playerRigidBody.AddForce(Vector3.forward * speed);
}
if(Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{
playerRigidBody.AddForce(Vector3.back * speed);
}
if(Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
playerRigidBody.AddForce(Vector3.left * speed);
}
if(Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
playerRigidBody.AddForce(Vector3.right * speed);
}
}
public void Die()
{
Debug.Log("Player died");
gameObject.SetActive(false);
}
}
'Development > Unity Engine' 카테고리의 다른 글
[Retro유니티] Bullet 구현 (1) | 2024.11.13 |
---|---|
[Retro유니티] Player Object 설계 2 - GetComponent/linearVelocity/GetAxis 사용 (0) | 2024.11.10 |
Unity 프로젝트용 .gitignore (0) | 2024.11.10 |
[Retro유니티] Main Camera 배경 변경 (0) | 2024.11.10 |
[Retro유니티] Component 사용: myRigidBody (0) | 2024.11.06 |