유니티 기본

정제로·2023년 7월 28일
0

Unity

목록 보기
6/19

UI를 통해 여러가지 Scene으로 옮겨가는 법

SceneManagement!

일단 UnityEngine의 SceneManagement라는 것이 필요하다

제일 윗줄에

using UnityEngine.SceneManagement;

넣기!

Scene 설정하기

public void GameStart()
{
    SceneManager.LoadScene("MainScene");
}

이런식으로 SceneManager를 이용해 LoadScene을 하여 원하는 Scene이름을 () 괄호안에 넣어준다! 대소문자 확인 필!

UI나 필요한 곳에서 함수 불러오기


난 UI에 버튼을 이용할거라 버튼 컴포넌트를 일단 불러왔다.

On Click()함수에 오브젝트 빈 곳이 보일거다! (지금 startBtn이 들어가 있는곳)

그곳에 내가 이 함수를 실행시켰으면 하는 UI를 드래그&드롭해준다!

이후 Runtime Only 오른쪽의 함수를 지정해주는 곳에서 방금 스크립트를 통해 만들어둔

public void GameStart()
{
    SceneManager.LoadScene("MainScene");
}

GameStart를 찾아서 설정해주면,
해당버튼을 눌렀을때 MainScene으로 이동!


Quaternion.identity

Quaternion이란?

  1. 유니티에서 사용되는 각도의 단위
  2. 유니팅에서 회전을 표현하기 위해 사용되는 구조체
  3. 굉장히 어렵기에 초보자 수준에서는 이해하기 힘들것임. 왜냐면 복잡한 사원수, 수의 체계를 이용하기 때문
    그래서 나중에 좀 연차가 쌓이면 그때가서 다시 제대로 깊게 파보길 권유
  4. 엄청나게 많은 메서드가 존재
    LookRotation
    Euler
    FromToRotation
    Slerp
    identity

Quaternion.identity

인자값으로 quaternion을 이용한 회전값을 줘야하는데, 넣어줄 값이 없을때 ( 회전을 시킬 필요가 없을때) 사용한다.

  • Unity Api 문서에서는
    "쿼터니언은 복잡한 수를 기반으로 하고, 직관적으로 이해하기 쉽지 않습니다. 따라서 거의 접근하지 않거나 개별 쿼터니언 컴포넌트(x,y,z,w)를 수정하지 않습니다."

라고 되어있다.

  • 회전없음 보다 "특정 회전 값 없이 생성하려는 프리팹 또는 3D 모델의 원래 회전각도로 적용한다" 라고 보는것이 좀더 정확할 것 같다

주로 Instantiate 에서 오브젝트를 무한히 생성할때, rotation을 줄 필요가 없을때, 사용한다.

출처


InfinityClone 막기


위처럼 prefab으로 설정한 오브젝트를 계속 출력하면 사라지지않고 계속 시스템에 쌓이게 되는 문제가 발생한다

따라서 일정수준의 좌표를 넘어가는 오브젝트는 삭제해주는 조치가 필요하다

transform.position += new Vector3(0, 0.5f, 0);
if (transform.position.y > 26.0f)
{
     Destroy(gameObject);
}

와 같이 오브젝트가 y좌표를 26.0f를 초과하면 Destroy시키는 함수를 사용!


프로젝트에서 마우스를 이용하는법

우리가 이용하는 마우스는 스크린에 그냥 보이지만 프로젝트 내에서 사용하려면 특수한 방법이 필요하다

Camera.main.ScreenToWorldPoint

월드좌표, 스크린좌표 (WorldPoint, ScrrenPoint)


이렇게 transform의 position으로 되어있는 값이 월드좌표 (x, y, z)

해상도를 800 * 400이면 제일 좌하단의 좌표는 0,0 이되고 우상단은 800,400 이 된다.

ScreenToWorldPoint

말 그대로 스크린좌표를 월드좌표로 변경해주는 Camera.main의 함수이다
따라서 내 마우스 포인터의 위치를 월드좌표내에서 받아야하면, 이 방법을 사용하면 되는거다!

//dog오브젝트를 마우스를 따라 x축으로 움직이게 하는법

Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

transform.position = new Vector3(mousPos.x, transform.position.y, 0);

이러면 스크린위에서 움직이는 마우스 좌표를 월드내의 dog오브젝트에 옮겨 마우스를 따라 움직이게 할 수 있다

profile
초보자입니다.. 잘못된 정보, 달게 받겠습니다..

0개의 댓글