[유데미x스나이퍼팩토리] 10주 완성 프로젝트 캠프 - 유니티(Unity) 기초 학습 1주차
유데미 x 스나이퍼팩토리 10주 완성 프로젝트 캠프 - 유니티 기초 학습 1주차 내용이다.
매 주 월, 수, 금 수업을 진행하고 있으며 첫 수업으로는 클라이언트 개발자의 간단한 설명과 각 종 엔진에 관하여 설명을 해 주었으며 또 유니티 설치와 프로젝트 생성 설명과 유니티 기능에 대하여 설명을 진행했다. 유니티가 처음은 아닌지라 간단한 예제정도는 충분히 수행할 수 있었다.
수요일 수업
수요일은 flappy bird를 간단하게 만들어보는 시간을 가졌다.
(대충 이런 게임)
수업을 진행하며 차근차근 게임을 완성시켰고 완성 후 코드로 설명을 붙혀나가겠다.
Player.cs
간략하게 해당 스크립트를 해석하자면 플레이어는 현재 y포지션의 값이 lowWarn보다 낮으면 jumpPower * jumpBoost값 만큼 이동한다. 낮지 않을 시 jumpPower만큼 이동한다.
여기서 이동함수에 대해 좀 더 알아보자
간단한 이동으로는 물체의 position을 변경해 물체를 이동하는 방법이 있지만 이는 순간이동을 하는 느낌을 주기 때문에 움직이는 물체라고 보기는 어렵다고 생각한다.
다른 이동 함수에는 Translate, MoveTowards함수가 있다.
Translate
는 방향
이라는 인자값을 받아서 그 방향대로 계속 이동하는 역할을 합니다.
MoveTowards
는 현재위치
에서 목표
를 향하여 이동하는 역할을 합니다.
허나 이 둘은 물리적 충동은 고려되지 않고 단순한 위치값
을 이용한 이동이다.
물리적 속성을 가지게 만드는 RigidBody를 활용한 이동으로는 AddForce
와velocity
가 있다.
AddForce
는 Rigidbody에 힘을 가해 가속도
를 줍니다.
AddForce의 매개변수로 ForceMode를 지정할 수 있는데 종류는 4가지가 있다.
-ForceMode.Force - Default값으로 오브젝트의 질량을 이용하여 계속적인 힘을 더한다.
-ForceMode.Acceleration - 계속적인 가속을 더하고 오브젝트의 질량은 무시한다.
-ForceMode.Impulse - 오브젝트의 질량을 이용하여 충격력 인스턴트를 더한다.
-ForceMode.VelocityChange - 속도 인스턴트를 더하며, 오브젝트의 질량은 무시한다.
velocity
는 Rigidbody의 속도를 나타냅니다. 오브젝트의 질량과 상관없이
일정 속도를 줍니다.
이동에 관한 함수는 우선 이정도만 정리하자
다음 코드는 OnCollisionEnter
함수이다.
우선 물체의 Collider에 다른 오브젝트가 감지되었을 때 불려지는 함수로 해당 스크립트에서는 현재 활성화 되어있는 씬을 재시작한다.
LoadScene함수에 관해서 잘 정리해놓은 블로그가 있어서 링크를 달아놓아야겠다.
LoadScene함수 설명 블로그
다음은 주석처리를 한 코드를 살펴보자
해당 오브젝트의 MeshRenderer 컴포넌트를 가져와 material의 color를 랜덤값으로 변경해주었다.
따라서 해당 오브젝트는 점프를 할 때 마다 rgb값이 랜덤값으로 변경이 된다.
Wall.cs
이 코드는 간단하게 Player오브젝트가 가지고 있는 Player.cs를 가져와 벽이 삭제될 때 점수 1점을 추가한다. 여기서 벽은 위에서 정리한 Translate를 이용해 움직이고 있음을 알 수 있다.
벽의 x포지션 값이 -10을 넘어가면 벽을 Destroy한다.
Spawner.cs
만들었던 Wall 오브젝트를 프리팹으로 만든 후 Empty 오브젝트를 만들어 Spawner로 만들고 해당 코드를 추가했다.
해당 코드는 정해진 interval만큼 반복적으로 -range~ range값 중 랜덤 값을 y포지션 값으로 Wall을 생성하는 코드이다.
딱히 어려운게 없어서 넘어가겠다.
금요일 수업
금요일은 유니티짱이라는 에셋을 가지고 와서 가볍게 구조에 대해 뜯어보는 시간을 가졌다.
또 지금까지 배운 내용을 토대로 미니게임을 하나 만들어보는 시간을 가졌다.
내가 만든 게임은 미로 게임이다.
정말 간단한 코드밖에 배우지 않았기에 어떤 게임을 만들까 생각하다가 오브젝트를 배치해 만드는 게임을 만들어보았다.
void Start()
{
offset = transform.position - player.transform.position;
}
private void LateUpdate()
{
transform.position = player.transform.position + offset;
}
플레이어와 카메라의 Offset만큼 유지하는 코드이다.
여기서 봐야할 함수는 LateUpdate()이다.
스크립트에는 생명주기(플로우 차트)가 있다.
Awake()부터 시작해서 OnDestory()까지 여기서 LateUpdate는 Update 바로 아래에 불려지게 설정이 되어 있는데 즉 플레이어 update함수로 움직이면 그 다음에 실행되는 LateUpdate로 플레이어가 움직인 만큼 카메라도 움직이게 된다.
꼭 한 번은 다시 봐야하는 설명이니까 링크를 걸어야겠다.
Unity 실행 순서
Update에는 FixedUpdate도 있긴한데 이 둘의 차이는 FixedUpdate는 호출 간격이 일정하지만 Update는 매 프레임 호출이 되기 때문에 수행되는 작업의 양이 다르므로 주기가 일정하지 않다. (우선 이정도만 알고 가자)
1주차 정리 끝 !
본 후기는 유데미-스나이퍼팩토리 10주 완성 프로젝트캠프 학습 일지 후기로 작성 되었습니다. #프로젝트캠프 #프로젝트캠프후기 #유데미 #udemy #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #unity #유니티 #게임개발 #메타버스