Unity 기초가이드3-2 : Pivot, Canvas - RenderMode, Rigidbody 2D중력 제거

2024. 8. 23. 15:11카테고리 없음

개요

Unity 기본 개념 정리

내용 - Pivot(중앙잡기)

pivot을 0.5로 설정하면 중앙이고, 0으로 설정하면 왼쪽끝으로 설정한다는 뜻이다.

그리고 Scale값을 조절하면 된다.

내용 - Canvas - RenderMode

Canvas의 RenderMode를 Overlay 를 World Space로 변경해 주기

Overlay : RenderMode가 Overlay로 설정된 Canvas는 휴대폰, 노트북, 또는 모니터 등의 기기 스크린에 직접적으로 그려집니다. 이 모드에서는 UI 요소들화면 크기에 맞게 자동으로 조정되며, 다른 게임 오브젝트와 상호작용하지 않습니다. 주로 메인 메뉴, 버튼, 텍스트 등 일반적인 UI 요소에 사용됩니다.

World Space : UI가 3D 오브젝트와 상호작용하거나, 게임 세계 내 특정 위치에 고정되어 있어야 할 때 적합합니다. 예를 들어, 게임 내 디스플레이 패널이나 3D 오브젝트 위에 떠 있는 상태바 같은 인터랙티브한 UI를 구현할 때 사용합니다.

내용 - Hierarchy에 있는Prefabs 저장

Hierarchy창에 있는 Prefabs를 수정해서 저장할때에는 Overrides를 눌러 Apply All을 눌러주면 Prefabs에 저장이 된다.

내용 - Rigidbody 2D 를 사용할떄 중력의 영향을 없애는 방법

Food에 Rigidbody 2D, Circle Collider 2D 달아주기

참고) 충돌 = 한쪽에 rigidbody + 양쪽에 collider

단! Body Type을 Kinematic으로 잡아주기 = 중력의 영향을 안 받겠다는 뜻

→ 그리고 isTrigger에 체크! 중력의 영향을 안 받을 때에는 이것을 체크해 주세요(부딪칠 물체에도 Is Trigger를 켜야한다.)

이렇게 되면 C#script에서  OnCollisionEnter2D메서드를 사용할 수 없게 된다.

이유

Rigidbody가 Kinematic속성으로 바뀌게 되어서 사용할 수 없게 됐다.

그러면 어떻게 해야돼나? 그래서 체크한 것이 Is Trigger이다

C#Script에서 사용할 함수는 OnTriggerEnter2D메서드이다.

private void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.gameObject.CompareTag("Food"))
    {
        if(energy < full)
        {
            energy += 1.0f;
            front.localScale = new Vector3(energy / full, 1.0f, 1.0f);
            Destroy(collision.gameObject);
            if(energy == 5.0f)
            {
                if(!isFull)
                {
                    isFull = true;
                    hungryCat.SetActive(false);
                    fullCat.SetActive(true);
                    GameManager.Instance.AddScore();
                }
            }
        }
    }
}

OnCollisionEnter2D메서드처럼 작성하면 된다.

 

내용 - Unpack

Prefab을 Hierarchy창에 가져와 Unpack을 하면 기존에 있던 Prefab에는 영향을 안끼친다.