일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Unity Chess
- unity 개발
- ETRI 연구연수
- 오픽 im1 5일
- unity 강의
- 유니티 대화
- 게임 개발 독학
- 유니티
- 크래프톤 정글 게임 랩
- 유니티 스토리
- 게임 개발
- Unity 독학
- 유니티 체스
- protobuf 란?
- node.js
- 게임 독학
- 크래프톤
- unity 게임
- unity
- 유니티 미연시
- unity 게임 개발
- 유니티 퀘스트
- protobuf란
- unity 공부
- 크래프톤 정글랩
- 오픽 im1
- 크래프톤 게임 정글 랩
- 유니티 독학
- 크래프톤 정글 게임랩
- unity 설치
- Today
- Total
하참이의 아이디어노트
Unity 강의 2일차 (2) - 빠르게 이동하는 물체 추적하기 본문
본 강의는 다음 문서를 참고하여 제작하였습니다. 자세한 내용은 하단 링크를 참조하시거나 댓글로 질문 남겨주시면 성심성의껏 답변 드리겠습니다.
1.3강 - 빠르게 이동하는 물체 추적하기 - Unity Learn
개요: 차량에서 눈을 떼지 마세요. 이 수업에서는 카메라에 대한 새로운 C# 스크립트를 코딩하여 카메라가 도로를 달리는 차량을 따라가고 플레이어가 씬을 제대로 볼 수 있도록 만들어 보겠습
learn.unity.com
2일차도 됬겠다 이제 감이 슬슬 잡힐 것 입니다. 서론없이 바로 본론으로 넘어가죠!
지난시간에 PlayerController의 스피드를 줄였던 것을 확인할 수 있었습니다. Vector3에 deltaTime을 곱하고, 상수 20을 곱했었지요. 하지만 이렇게 되면 속도를 변경할 수는 없을 것입니다. 이렇게 되면 현실감 있는 게임이랑은 거리가 멀어지지요.
그렇기에 우리는 변수를 사용할 것 입니다. PlayerController 코드를 다음과 같이 변경합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 20;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// Move the vehicle forward
transform.Translate(Vector3.forward * Time.deltaTime * speed);
}
}
추가 된 부분은 float speed가 추가되었고, Vector3 * deltaTime에 speed 변수를 곱하도록 변경했습니다.
이렇게 되면 프로그래밍으로 speed 값을 변경하여 게임 도중 속도를 변경 할 수 있을 것이고, public 으로 선언했기에 Unity Editor 에서도 속도 값을 변경 할 수 있을 것 입니다.
이제 다른 문제를 고쳐봅시다. 게임 뷰를 보면 처음엔 차가 움직이는데 차가 멀리 가면 장애물이 보이지도 않고, 차도 점점 작아져만 가고 매우 불편해집니다.
이 문제를 해결하기 위해선 어떻게 해야할까요? 카메라를 이동시키면 되겠지요. 우리는 카메라가 차를 따라가도록 해서 이 문제를 해결 할 것 입니다.
Scripts 폴더에 새 스크립트 FollowPlayer를 생성합니다.
그리고 스크립트를 다음과 같이 작성합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowPlayer : MonoBehaviour
{
public GameObject player;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
transform.position = player.transform.position;
}
}
보시면 GameObject player를 선언하고, Update에서 게임오브젝트의 포지션을 player의 포지션으로 설정합니다.
눈치가 빠른 학생이라면 이 스크립트 컴포넌트를 카메라에 붙이고, GameObject player 에는 Vehicle을 부여하면 카메라의 위치는 player를 따라가게 될 것이라 생각할 것입니다.
바로 해보죠! 이 스크립트 컴포넌트를 카메라에 부여합니다.
Follow Player에 Player라는 프로퍼티가 있는 것을 확인 할 수 있습니다. public으로 선언했으니 말이죠.
Player에다 Vehicle을 부여해줍니다.
이제 게임을 실행해봅니다.
네? Vehicle을 따라가기만 하니 차량의 중심에 카메라가 달렸네요. 바로 수정해보죠.
FollowPlayer함수를 다음과 같이 수정해줍니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowPlayer : MonoBehaviour
{
public GameObject player;
private Vector3 offset = new Vector3(0, 5, -7);
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
transform.position = player.transform.position + offset;
}
}
Vector3 offset 변수를 선언해주고 player의 position에서 값을 늘려주도록 합니다. 여기서 중요한 점은 offset은 private로 선언했다는 것이겠네요. 이렇게 되면 Unity Editor에서 값을 변경할 수 없겠네요. (참고하셔야 할 점은 public과 private는 Unity Editor에서 보기만을 위한 기능이 아닙니다.)
게임을 실행해보겠습니다.
잘 따라가네요! 하지만 카메라가 너무 흔들립니다. 조금 더 자세하게 프로그래밍을 하기 위해서 Update 함수를 LateUpdate로 변경합시다.
왜 LateUpdate를 사용하면 흔들림이 줄어드는 것일까요? 왜냐하면 플레이어가 키보드를 입력하거나 다른 이벤트 처리가 실행이 되고 나서 카메라가 따라가는 것이 더 부드러운 처리가 가능해지기 때문입니다.
좋습니다! 다음 시간에는 차량을 움직여보도록 하겠습니다.
수고하셨습니다!
'Unity > Unity 기초' 카테고리의 다른 글
Unity 강의 2일차 (4) - 비행기 프로그래밍 (2) | 2025.01.16 |
---|---|
Unity 강의 2일차 (3) - 주행 준비 (0) | 2025.01.16 |
Unity 강의 2일차 (1) - 차량, 비행기 조종 게임 프로그래밍 (0) | 2025.01.16 |
Unity 강의 1일차 (13) - 배경 음악 추가 (0) | 2025.01.16 |
Unity 강의 1일차 (12) - 스크립트로 게임 오브젝트 변경 (0) | 2025.01.16 |