Unity 사용 시 알아야 할 것들

ggm-_-·2024년 10월 7일
0

TIL (Tody I Learn)

목록 보기
13/27
post-custom-banner

2024.10.07(월)
오늘 배운 내용에서 내가 숙지하고 있는 내용을 제외하고 나머지 부분에서 유니티 사용 시 알고 있어야 할 만한 내용들에 대해 메모해 보았다.


Unity에서 컴포넌트로 받을 수 있는 것은?

  • monobehavior를 상속받은 애들만 컴포넌트에서 add컴포넌트로 사용할 수 있다.

Camera 컴포넌트

  • Projection의 Orthographic: 2D인데 입체감이 없는 2D이다.(원근감 표현이 없다)
  • Size의 숫자: 카메라 중앙에서 y축 천장까지의 Unit의 개수이다.

충돌 구현

충돌을 가능하게 하려면 Box Collider로 충돌 구현을 하고(Box가 아니여도 된다), RigidBody로 강체를 부여해 물리효과를 부여한다.

RigidBody

  • (Physics)Material설정 -> 충돌 시 어떤 방식으로 반응하는지 설정한다.(bounce를 넣으면 충돌 시 강체가 튕긴다.)

  • Constraints 설정 -> 특정 축을 안 움직이게 고정한다. 물체가 회전하지 않게 설정 가능하다.

  • 스크립트에서 rigidbody.velocity는 속도를 가져온다.


스크립트 작성에서 참고사항

  • MonoBehavior를 상속받아야 게임 오브젝트와 연결된 스크립트로 동작한다.
  • Start게임 오브젝트 시작할 때, Update매 프레임마다, FixedUpdate 매 물리 업데이트마다 호출된다.

스크립트 라이프 사이클

  • 오브젝트 생성: Awake-> OnEnable-> Start
  • 반복: FixedUpdate-> OnTriggerXX-> OnCollisionXX-> Update-> LateUpdate
  • 종료: OnDisable(비활성화)-> OnDestroy(파괴)-> OnApplicationQuit(앱종료)

더 많은라이프 사이클: Unity Documentation
같이 보면 좋은 글: 유니티 - FixedUpdate()와 Physics Loop에 대한 이해


Pixel Per Unit

  • 스프라이트의 픽셀이 게임 세계 내에서 차지하는 공간이 얼마나 되는지를 나타낸다. PPU의 숫자는 Unity의 기본 공간 단위인 Unit(Scene에서의 한 박스)이 몇 x 몇 픽셀인지를 나타낸다.
  • 모든 스프라이트에 대해서 일관된 PPU값을 사용하는 게 좋다.
    왜냐하면 Pixel Perfect Camera라는 픽셀에서 발생하는 문제들을 해결해주는 카메라 기능이 있는데, 이놈은 기본적으로 PPU가 전부 같다라고 생각한다. PPU값이 다르면 이걸 사용하기가 어려워진다.

Transform

  • 게임 오브젝트의 위치, 회전, 크기를 정의한다.
  • Transform은 계층구조다.
  • 부모는 하나, 자식은 여러개가 가능하다.
  • 부모를 따라 함께 움직인다.
  • 부모를 기준으로 위치를 나타낸다.

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

부모를 기준으로 한 좌표와 세계를 기준으로 한 좌표이다.

로컬 좌표계

  • 스크립트에서 localPosition, localRotaion, localScale등이 있다.

월드 좌표계

  • 스크립트에서 position, rotaion, lossyScale등이 있다.

Input.GetAxis

InputManager- 유니티 4, 5년 전 기존에 사용하던 기능이다. 아직도 사용하는데는 있다.

Input.GetAxis는 축의 값을 반환한다.
입력장치의 움직임에 따라 -1~1 사이의 값이 변경된다.

  • 다음 코드를 사용하면 wasd나 방향키를 통한 입력을 통해 오브젝트를 움직일 수 있다.
void Update()
{
    //매프레임마다 Vertical과 Horizontal축을 가져온다.
    float vertical = Input.GetAxis("Vertical");
    float horizontal = Input.GetAxis("Horizontal");

    Vector2 direction = new Vector2(horizontal, vertical);
    //정규화-길이를 1로 만드는 작업
    direction = direction.normalized;

    GetComponent<Rigidbody2D>().velocity = direction * speed;
}

deltaTime

delta는 차이란 뜻. deltaTime은 전 프레임과의 차이를 나타낸다.
결국, deltaTime은 프레임과 프레임 사이의 시간을 나타낸다.


접근제한자와 직렬화

  • Public, Private, Protected, SerializeField가 있다.
  • 기본적으로 C#과 동일하지만, 직렬화의 속성을 표현한다.
  • public은 유니티 인스펙터 창에서 볼 수 있다. private은 안보인다.
  • private하지만 밖에서 보여줄 필요가 있을 때, private에 SerializeField를 사용하면 인스펙터에서 수정가능한 필드로 표시된다.
  • SerializeField 예제 코드
public class ExampleClass : MonoBehaviour
{
    public int publicVariable;
    private int privateVariable;
    
    [SerializeField]
    private int serializedFieldVariable;
    
    private void Start()
    {
        publicVariable = 10;  // 외부에서 접근 가능
        privateVariable = 20; // 클래스 내부에서만 접근 가능
        serializedFieldVariable = 30; // 인스펙터에서 접근 가능
    }
}
profile
미숙한 초보 게임 개발자
post-custom-banner

0개의 댓글