본문 바로가기
제출용/TIL

내일배움캠프 18일차 TIL + 스크립트 작성법

by 유린테 2024. 5. 9.

이번 강의 상당히 어렵고 길어서 집중력이 떨어지는데

튜터님 말은 상당히 빠르고 휙 지나간다. 

쉽지 않다..!!

 

클래스 구조

클래스 구조 (메인)
클래스 구조 (기타)

스크립트 작성방법

프로젝트가 생성되면 unity editor 열기 - 스크립트를 작성할 수 있는 코드 편집기 선택. (ex. Visual Studio)

스크립트를 작성할 폴더를 생성하고, 해당 폴더에 새로운 C# 스크립트 파일 만들기

스크립트 파일을 더블 클릭하여 코드 편집기에서 스크립트 열기

스크립트 파일에는 게임의 로직, 오브젝트의 동작, 입력 처리 등을 정의 하는 코드 작성

 

MonoBehaviour 를 상송받은 클래스를 작성하기. 이 클래스는 유니티의 게임 오브젝트와 연결된 스크립트로 동작.

필요한 변수, 함수, 이벤트 등을 정의하고 구현. 게임의 동작을 위한 로직 작성

필요한 Unity 함수들을 오버라이딩 하여 원하는 동작을 구현할 수 있다

예를들어 Start(), Update(), FixedUpdate() 등을 활용할 수 있음

필요에 따라 다른 스크립트나 unity의 컴포넌트와 상호작용하는 코드를 작성할 수 있다.

 

스크립트 라이프 사이클

Monobehaviour 를 상속받는 클래스들은 유니티 이벤트 함수를 활용할 수 있음

게임 오브젝트의 생명 주기 동안 호출되는 특정한 메서드들의 순서와 타이밍

게임 오브젝트의 생성, 초기화, 업데이트, 파괴 등과 관련된 작업 수행

Awake가 가장 먼저임 

Awake-Start 까지 첫프레임 시작 전에 발동

 

핵심 기능 소개

 

Pixel Per Unit (PPU)

스프라이트의 픽셀 수와 해당 스프라이트가 게임 셰계에서 차지하는 공간의 관계를 설명

ex PPU 가 100이면 스프라이트의 100픽셀은 게임 세계에서 1 유니티 단위를 나타냄.

 

스프라이트의 크기 : PPU 값이 클 수록 스프라이트는 작아진다. 

더 많은 픽셀이 동일한 게임 세계의 공간에 매핑되기 때문

 

물리 시뮬레이션 : PPU값은 물리 시뮬레이션에 영향을 미친다.

높은 PPU값은 더 작은 스프라이트를 생성하므로, 이는 더 높은 해상도의 물리 시뮬레이션을 가능하게 합니다.

 

퍼포먼스 : 높은 PPU 값은 더 많은 연산을 필요로 합니다. 이는 성능에 영향을 미칠 수 있음

따라서, 필요한 만큼의  PPU 값을 설정하는 것이 중요

 

일관성 : 모든 스프라이트에 대해 일관된 PPU 값을 사용하는 것이 좋다. 

이는 스프라이트간의 크기 비율을 일정하게 유지하고, 물리적 행동의 일관성을 보장하는데 도움이 됨.

 

이건 스프라이트에 대한 얘기라 이미지에서는 다르게 적용될 수 있음

 

>>> ??? PPU 뭔소린지 1도 모르겠다

 

계층구조 ('Transform') 구조

각 게임 오브젝트는 Transform 컴포넌트를 가지고, Trasnform 컴포넌트는 게임 오브젝트의 위치, 회전, 및 크기를 정의

게임 오브젝트는 다른 게임 오브젝트의 자식이 될 수 있음

부모 게임 오브젝트의 Transform 이 변경되면 (ex. 이동, 회전, 크기변경) 그 자식 오브젝트들의 Transform도 동일 적용됨

게임 오브젝트들 사이에 계층관계가 형성되고 이를 트리구조라 부른다

이 구조는 복잡한 씬을 구성하고 관리하는데 유용함.

ex. 차량오브젝트 각 부품 (바퀴.핸들 등)을 자식 게임 오브젝트로 두면, 차량의 Transform이 변경될 때 함게 움직임

 

부모는 하나밖에 존재하지 않고, 자식은 여러개 존재할 수 있다!!!

캐릭터의 옷,신발,머리,등..... 캐릭터 몸(부모) - 옷,신발.머리....(자식)

 

왜 이름이 트랜스폼인가

> 트랜스폼의 데이터들이 부모에 대한 변환 (Transformation)을 나타내고 있기 때문

ex. position 2.0.0인 트랜스폼이 있다면, 부모에 대해 position이 2만큼 x로 떨어져있다는 것

행렬로 나타내면 아래와 같다

 

로컬 좌표계(Local Coordinate System)와 월드 좌표계(World Coordinate System)

 

로컬 좌표계 : 유니티에서 인스펙터 창에서 볼 수 있는 position, scale, rotation 등이 로컬 좌표계에 따른 값에 해당함

월드 좌표계가 아닌 부모에 대한 좌표를 말하며, 부모에 대해 X축으로 2만큼 떨어져 있으면

이 오브젝트의 포지션값은 2,0,0) 이 되는 것

스크립트에서는 localPosition, localRotation, localScale 등이 있음

 

월드 좌표계 : 게임 세계의 전체적인 참조 프레임을 제공

모든 게임 오브젝트가 공유하며, 월드 좌표계에서의 위치는 게임 환경 내에서 오브젝트의 절대적인 위치를 나타냄

월드좌표계는 변하지 않고 일정하게 유지된다

스크립트에서는 position, rotation, lossyScale 등을 통해 참조한다.

 

Input.GetAxis

유니티의 입력 시스템에서 사용되는 메서드

입력 축의 값을 반환한다.

입력 축은 주로 키보드나 조이스틱과 같은 입력 장치의 입력을 나타낸다

GetAxis  메서드는 -1부터 1 사이의 값을 반환하는데, 입력 장치의 움직임에 다라 해당 값이 변경됨

값이 0에 가까울수록 입력이 없거나 중립 상태를 나타내며, 양수 값은 양 방향 입력을 , 음수 값은 음 방향 입력을 나타냄

GetAxis  메서드는 주로 플레이어의 움직임, 회전, 점프 등을 처리하는데 사용됨

ex. 수평이동을 처리하는 경우, 좌우 화살키의 입력에 따라 Input.GetAxis("Horizontal")을 사용해 좌우방향값을 얻는다

이 값은 플레이어의 이동 속도나 회전 속도와 같은 변수에 적용하여 게임 오브젝트를 제어할 수 있다


에딧 - 프로젝트 세팅 - 인풋 매니저 를 보면 Horizontal 과 Verical 이 있는데, 거기서 키 세팅을 해줄 수 있다.

 

 


 

 

강의록 그대로 복붙하면 안된다고 하셨지만..... 지금 내용은 이렇게 될 수 밖에 없는 것 같다

따라하며 외우는 어쩌구.

이번 강의 왜 이렇게 집중이 안돼는지... 내 집중력이 바닥나버렸나보다. 흑흑