본문 바로가기
Unity 공부

10.23 (Unity 공부)

by 오랑이귀엽다 2023. 10. 23.

Main Camera에서 백그라운드 설정

 

 

리마인드 : 버튼 컴포넌트는 "sprite"가 아니라, 반드시 "UI Image"에 붙여야 작동한다는 사실!

 

 

 

Quaternion.identity 는 회전이 없다는 뜻! (no rotation)

 

hp 나타내기

 

Pivot 이란?

Pivot 은 UI 객체의 기준점. Position, Scale, Rotation 은 이 기준점에 영향을 받아 움직인다..

특히 Position 은 Pivot 과 Anchor의 설정에 따라 동일한 값이라도 전혀 다른 위치에 표시될 수 있다.

즉. 만약에 이 image나 UI가 늘어나거나 줄어들 때 어디를 기준으로 변하느냐를 말함

(지금 Pivot 0.5 라는건 중앙을 기준으로 변화함 뜻함)

수정후

 

 

Rigidbody2d : body type

dynamic : 디폴트 타입으로 다른 body type과 모두 충돌하고 중력과 힘의 영향을 받는다.

위치나 회전값을 동적으로 변경하는 오브젝트에 사용하기엔 비효율 적

  • mass : 오브젝트의 질량을 설정
  • linear drag : 해당 값이 클수록 물체의 이동에 영향을 준다. 다른 오브젝트와 접촉이 없어도 스스로 움직임을 멈춘다.
  • angular drag : 해당 값이 클수록 물체의 회전에 영향을 준다. 다른 오브젝트와 접촉이 없어도 스스로 회전을 멈춘다.
  • collision detection : discrete, continuous 중 continuous 로 설정한 경우 충돌된 물체끼리 서로를 통과하지 않지만 더 많은 cpu 시간을 사용해 꼭 필요한 오브젝트에만 설정한다.

 

kinematic  : 동적으로 제어하는 오브젝트에 적합한 타입

중력과 힘의 영향을 받지않기 때문에 동적으로 제어 했을때 정확하게 반영된다.

dynamic 타입을 갖는 오브젝트와 충돌하고 그외 나머지 kinematic 과 static 타입과는 충돌하지 않다.

  • use full kinematic conta : 해당 옵션을 체크하면  dynamic 타입이 아닌 모든 타입의 오브젝트와 충돌하게 되지만 충돌 후 물리엔진에 영향을 받지 않는다.

 

static : 움직이지 않는 오브젝트에 적합한 타입

 

이 세가지 타입을 오브젝트 성질에 맞게 설정해야 리소스를 덜 잡아먹어 최적화에 도움이 된다.

 

 

에너지 게이지 채우기

시작 게이지를 0 (front의 x scale을 0으로)

hungry 밑에, Canvas 밑에, front를 찾아서, x scale을 enery/full 값으로 조절

 

에너지 꽉 차면 옆으로 비키게 하기

단, 화면 오른쪽에 있었으면(x>0) 오른쪽으로, 왼쪽이면 왼쪽으로 비키게 하기

 

 

이미지 변경 시점이 다른 이유는?

게임 설계상 OnColliderEnter2DUpdate에서 ‘따로’ energy를 체크 하기 때문에 고양이의 이미지가 변경되는 시점과 옆으로 비키는 시점이 조금 다르다.

 

 

하나의 스크립트에 전혀 다른 2개이상의 오브젝트를 생성하고 싶을 때

public int type;

 

 

이미지 사이즈 조절

 

 

여러 오브젝트를 생산하는 방법 (for 이용)

여러 같은 오브젝트를 일일이 하나 하나 만들고 배치하는 것은 가능은 하지만 귀찮음

 

void Start()
{
    for (int i = 0; i < 16; i++) //이는 i 가 0~15까지 로그를 찍어준다. 즉, 하나씩 커지면서 반복
    {
        Debug.Log(i);
    }
}

이를 이용해서

public GameObject card;

void Start()
{
    for (int i = 0; i < 16; i++)
    {
        GameObject newCard = Instantiate(card); // newCard를 cards로 옮겨라!
        newCard.transform.parent = GameObject.Find("cards").transform;
    }
}

를 나타내면

 

카드 위치 잡아주기

 

void Start()
{
    for (int i = 0; i < 16; i++)
    {
        GameObject newCard = Instantiate(card);
        newCard.transform.parent = GameObject.Find("cards").transform;

        float x = (i / 4) * 1.4f;
        float y = (i % 4) * 1.4f;

        // x : 1을 4로 나눈 몫 = 0

           y : 1을 4로 나눈 나머지 = 1

           (0,1) 위치 ⇒ (1.4씩 곱해주면) ⇒ (0, 1.4) 위치
        newCard.transform.position = new Vector3(x, y, 0);
    }
}

 

카드를 맵 안으로 옮겨주기

x, y를 적당히 빼줘서 전체를 가운데에 위치하게 하기

void Start()
{
    for (int i = 0; i < 16; i++)
    {
        GameObject newCard = Instantiate(card);
        newCard.transform.parent = GameObject.Find("cards").transform;

        float x = (i / 4) * 1.4f - 2.1f;
        float y = (i % 4) * 1.4f - 3.0f;
        newCard.transform.position = new Vector3(x, y, 0);
    }
}

 

'Unity 공부' 카테고리의 다른 글

03.18 (TIL-Unity)  (0) 2024.03.19
10.20 (Unity 공부)  (0) 2023.10.20
10.17 (Unity공부)  (0) 2023.10.17
10.13 (Unity공부)  (0) 2023.10.13