직접 구현하는 함수와 다르게 유니티에서 제공하는 함수들이 존재한다.


그 중 대표적인 함수들 중 가장 빈번히 사용되는 함수 세 가지가 Awake()와 Start() 그리고 Update()함수이다.


Awake()와 Start()의 차이점


두 가지 함수 모두 초기화할 때 주로 사용되지만, Awake() 함수가 Start() 함수보다 먼저 호출된다.


Start() 함수는

Posted by sungho88
,

먼저, C# Script에서 다른 Scene으로 이동을 하기 위해서는 다음과 같다.


1. 코드 상단에 Scene을 관리하는 SceneManagement를 추가해준다. 


using UnityEngine.SceneManagement;


1. Scene 이동하는 코드를 다음과 같다.


SceneManager.LoadScene("Scene_Play");


LoadScene 뒤에 매개변수에는 string으로 된 이동하고자 하는 Scene의 이름이 들어간다.


위 코드같은 경우 Scene_Play로 이동하겠다는 의미이다.


다만, 여러개로 오버라이딩 되어있어 Scene의 이름 이외에도 씬의 번호 또는 다른 것으로도 Scene 이동이 가능하다.


또한, 이동하려고 하는 버튼을 눌렀을 때 에러가 날 수도 있다.


Scene 'Scene_Play' couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded.

To add a scene to the build settings use the menu File->Build Settings...

UnityEngine.SceneManagement.SceneManager:LoadScene(String)

Source_Title:Press_Play() (at Assets/Scripts/Source_Title.cs:21)

UnityEngine.EventSystems.EventSystem:Update()


새롭게 만들긴 했지만, 아직 Scene에 대한 정보를 갖고 있지 않기 때문이다.


File - Build Settings에서 Scene을 추가해주어야 한다.


밑에 Add Open Scenes 버튼을 클릭하면 현재 Scene이 등록된다.


Scene_Play를 추가해주는 방법은 드래그해서 끌어다 넣으면 된다.


이렇게하면 유니티에게, Scene이 2개가 존재한다는 것을 알리는 의미이다.


이것은 밑으로 누적되는 것이 아니라, 순서를 쉽게 바꿀 수 있다. 

즉, Scene_Play를 Scene_Title위로 마우스 드래그로 쉽게 끌어 올릴수 있다.


그래서 SceneManager.LoadScene(1)과 같이 번호를 쓰게 된다면 Scene이 꼬일 수 있다. 

따라서, SceneManager.LoadScene을 사용할때는 매개변수로 Scene의 이름을 명시해서 사용하는 것이 좋다.

Posted by sungho88
,

유니티에서는 Project View에서 자기가 원하는대로 이름을 지정하여 


폴더, C# Script 등을 만들 수 있다. 하지만, 미리 정해져있는 이름을 사용할 수도 있다.


폴더명을 resources 또는 Resources라고 생성을 하면, 


이 폴더의 내부에 있는 여러 에셋 데이터들을 런타임에 로딩하여 사용할 수 있게 된다.


사용방법은 다음과 같다.


Instantiate(Resources.Load("Player") , pos , Quaternion.identity);


이렇게하면, Resources 폴더에 들어있는 Player라는 오브젝트를 호출한 것이다.


경로가 다단계로 이루어져 있어도 사용이 가능하다. Resources 안에 characters 안에 Player가 있다면,


Instantiate(Resources.Load("characters/Player") , pos , Quaternion.identity);


또한, Resources.Load은 하나만 불러오는 것이다.


만약에 많이 한꺼번에 불러올 때 Resources.Load를 사용한다면, 많이 반복해야한다. 이럴 경우에는


Instantiate(Resources.LoadAll("characters") , pos , Quaternion.identity);


이렇게 서브 폴더명만 써넣으면 된다.

 

object[] players = Resources.LoadAll( "characters" );


LoadAll의 경우는 통째로는 as GameObject[]를 이용하여 형 변환할 수 없다. 


다만, 개별 항목에 대해서는 형변환할 수 있기때문에 큰 문제가 되진 않는다.


 

Posted by sungho88
,