씬전환이 이뤄질 때 기존 씬에 있던 객체가 유지 되지 않는 문제가 있다.
플레이어 또한 사라지기 때문에 이를 스크립트로 다뤄준다.
moving object 스크립트의 start 함수 안에 dont distroy onroad (game object) 문구를 넣어준다.
씬 전환이 일어나도 게임 오브젝트를 유지한다는 의미이다.
동일하게 카메라 움직임을 담당하는 스크립트에도 문장을 추가해주고, 이동 씬에서 카메라와 플레이어 객체는 없애준다
그러면 이제 이동해도 카메라랑 캐릭터는 살아있는것을 dont distroy 아래에 목록으로 볼 수 있다
그러면 이제 캐릭터가 씬을 이동하는데 그 위치를 지정해주려한다.
이동할 씬에서 start point 객체를 하나 생성해준다 (그냥은 잘 보이지 않으니 박스콜라이더 넣어주면 굿)
여기에 붙일 스크립트도 하나 생성해준다.
sratrPoint 스크립트에서 현재 있는 맵 이름을 받아오려한다.
(>>유니티 변수는 자료형으로 외부 스크립트를 이용 가능하다.)
그러기 위해 플레이어에 부착된 스크립트로 이동하여 현재 맵 이름을 저장하기 위한 변수를 public으로 선언한다
그리고 맵 이동을 위한 스크립트로 이동하여 movingObject 스크립트가 부착된 오브젝트인 플레이어를 받아온다.
이를 위해 findObjectOfTyep 함수를 이용한다
받아온 플레이어의 currentMapName에 transferMapname 을 저장해 준다.
정리하면
startPoint 스크립트에서 현재 맵 이름을 가져오기 위해
플레이어에 부착된 moving 스크립트로 이동하여 저장할 변수를 설정해주고
transfer스크립트로 이동하여 플레이어 객체를 받아온 다음 그 플레이어의 현재 맵 이름 저장 변수를 가져와 스크립트에서 받은 맵 이름을 저장해준다
맵이 일치하는 경우 startpoint 객체의 위치로 이동시켜야하므로 여기서도 현재 맵 이름을 꺼내오고 사용해준다.
이제 원하는 위치로까지 이동ㅅ킬수 있게됐다
카메라도 좀 조절을 해주겠다.
cameraMove스크립트를 이용한다.
cameraMove 스크립트에 연결된 객체(theCam)를 가져온다음 이 객체의 위치를 startPoint의 위치(this)로 조절해준다.
근데 원래 위치로 돌아오니 플래이어 객체가 두개??
문제는 dont distroy onload 로 플레이어는 계속 유지되는데 첫 씬에서 플레이어객체를 생성하게 되기 때문에 다시 첫씬으로 돌아올 때마다 플레이어가 또 생기는 것이엇다..
이를 막아줘야한다.
static으로 변수를 선언해 스크립트가 적용된 모든 객체에서 이 변수를 공유한다.
만약 객체가 없을 경우 원래대로 속성을 유지하고 instanse에 값을 준다.
이미 존재하고 있는 경우에는 원래 존재하던 gameobject를 삭제하여 캐릭터가 여러개 생기지 않게 해준다.
카메라에도 dont distroy가 붙기 때문에 똑같이 작업해준다.
이렇게 처리해주고나면 카메라와 캐릭터 모두 왔다갔다가 잘 되는 것을 볼 수 있다.

여기서는 씬에서 씬으로의 이동이 이뤄졌는데 이렇게 하지 않고 한 씬 안에 맵을 여러개 두고 캐릭터만 움직이는 방법으로도 구현 가능하다.
getComponet == 현재 스크립트가 붙어있는 오브젝트 속에서 찾음
findObjectOfType == 모든 오브젝트에서 찾음
Transform?
transform은 모든 object가 반드시 갖는 값이다. Position(위치), Rotation(회전), Scale(크기)를 나타내는 Component이다.
'유니티' 카테고리의 다른 글
유니티 2D 맵 -3 (0) | 2025.02.04 |
---|---|
유니티 2D 맵 -2 (0) | 2025.02.02 |
유니티 2D 맵 -1 (2) | 2025.01.31 |
유니티 2D 카메라 대상 추적 (0) | 2025.01.30 |
유니티 2D 방해물 (0) | 2025.01.26 |