2D 독수리 잡기 게임 이후로 3D를 통하여 새로운 미니 프로젝트를 계획하였다.
점프 맵부터 시작하여 외부 파일들을 활용하여 다양한 기능들을 구현 해 보고, 애니메이션 등의 기능들 또한 구현하고, 무료 에셋들을 사용하여 게임다운 소소한 게임을 하나 만들어 보고자 한다.
우선 제작 계획부터 세워 보도록 하자.
점프맵
우선은 점프 맵 구성이다. 2D로는 플랫포머 게임과 같은 것이라고 보면 된다.
1. 이름 : 점프 게임
2. 목표 : 아이템을 먹으면서 골인하게 되어 높은 점수를 받는 것이 목표이다.
3. 결과 산정 요소 : 점수 (먹은 장애물 개수 * 장애물 별 가중치 - (최소 클리어 시간을 넘었을 시 초과한 시간))
4. 구현에 필요한 요소들 : Rigidbody, Collider, Rotate, Excel 관리 Asset (최고점수 등에 사용) 등등
점프 맵 이후에는 퀘스트를 받을 수 있는 RPG 형태의 게임 제작을 목표로 하고 있다.
플레이어 생성
기본적으로 플레이어 공과 발판으로 사용할 발판들을 만들어 준다.

구 형태로 만들어 주었다.

이미지를 Material 형태로 구에 씌워 주었다.
구의 이동과 점프 기능을 넣은 코드 Move.cs이다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Move : MonoBehaviour
{
Rigidbody rigid;
bool isJump; // 점프 여부 판단
AudioSource item1;
public int Score;
float jumpForce = 60.0f;
// Start is called before the first frame update
void Awake()
{
item1 = GetComponent<AudioSource>();
rigid = GetComponent<Rigidbody>();
isJump = false;
Score = 0;
}
void Update()
{
if (Input.GetButtonDown("Jump") && !isJump) // not 연산자를 사용한다. (Jump 상태가 아닐 때!)
{
rigid.AddForce(new Vector3(0, jumpForce, 0),ForceMode.Impulse);
isJump = true; // 그런데 다시 false로 언제 만들어 줄까? -> 충돌!
}
}
// Update is called once per frame
void FixedUpdate()
{
float h = Input.GetAxisRaw("Horizontal"); // Raw 는 0,-1,1로 떨어진다.
float v = Input.GetAxisRaw("Vertical");
rigid.AddForce(new Vector3(h, 0, v),ForceMode.Impulse); // 3D에서 좌,우는 x축, 앞,뒤는 z축이다.
}
private void OnCollisionEnter(Collision collision)
{
// 바닥에 부딪혔을 때 점프 여부를 초기화 한다!
if(collision.gameObject.tag == "base")
{
isJump = false;
}
}
private void OnTriggerEnter(Collider other)
{
if (other.tag == "item1")
{
item1.Play();
}
}
}
Input.GetAxisRaw를 통하여 수평, 수직 방향키를 입력받아 값을 이용한다.
그것을 이용하여 사방으로 힘을 받아 움직이게 하였으며, 점프는 Jump라는 이름으로 등록 된 키(Space Bar)를 이용하여 입력 받아 사용하였다.
카메라 설정
카메라는 플레이어를 따라다니게 만들고자 한다.
그런데 기존에 배틀그라운드, 마인크래프트와 같이 3인칭 방향으로 모든 방향을 볼 수 있게 하는 것 까지는 아니고 어느 정도의 거리를 떨어져서 전진할 수 있게끔 만들고자 한다.
(앞을 보는대로 카메가 각도 및 위치가 변하는 것은.. 사람 모양의 캐릭터를 사용할 때 사용하는 것이 좋을 것 같다.)

카메라에 위와 같은 기능을 추가 해 주기 위해서는 카메라의 좌표와 플레이어의 좌표가 필요하다.
그 좌표들의 차이만큼을 offSet으로 만들어 주어 카메라의 위치에 LateUpdate로 적용시켜 주면 된다.
(UI, 카메라 등은 연산이 끝난 뒤에 LateUpdate를 통하여 갱신 해 주어야 한다.)
Camera.cs 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMove : MonoBehaviour
{
Transform playerTransform;
Vector3 offSet;
// Start is called before the first frame update
void Start()
{
playerTransform = GameObject.FindGameObjectWithTag("Player").transform;
offSet = transform.position - playerTransform.position;
}
// Update is called once per frame
void LateUpdate()
{
transform.position = playerTransform.position + offSet;
}
}

실행 시 위와 같은 각도로 플레이어를 볼 수 있게 된다.
'유니티 > 확장 프로젝트[3D]' 카테고리의 다른 글
3D 미니 프로젝트 5 ] 스테이지 3 구성 및 점수 저장 (0) | 2022.09.16 |
---|---|
3D 미니 프로젝트 4 ] 스테이지 2 컨셉 및 구성 (0) | 2022.09.12 |
3D 미니 프로젝트 3 ] 스테이지 수정 및 효과음, UI 추가 (0) | 2022.09.06 |
3D 미니 프로젝트 2 ] 스테이지 구성 및 기믹 발판 구성 (0) | 2022.09.02 |
3D 미니 프로젝트 1 ] 플레이어 이동, 스테이지 기초 세팅 (0) | 2022.09.01 |