2012-11-21 2 views
11

Unity3D에서 턴 기반의 전투 게임을 만들고 있는데 두 장면 (마을 장면과 전투 장면)이 있습니다. 캐릭터가 몬스터를 만날 때마다 캐릭터가 전투를하고 전투 또는 패배 후 마을로 돌아가는 전투 장면으로 이동합니다.유니티가 현재 장면이 일시 중지 된 상태에서 다른 장면으로 이동

문제는 캐릭터가 전투 장면 (문자 위치, 상태 등) 내가 사용하는 경우

들어갈 때와 같은 상태로 마을 현장에 반환하는 방법입니다

Application.LoadLevel('battlescene'); 

다음

Application.loadLevel('townScene'); 

그러면 townscene이 처음부터 시작됩니다. 우리가 중단했던 곳에서 마을 만들기를 계속하는 방법?

답변

15

이렇게 할 수 있다고 생각되는 두 가지 방법이 있습니다. 그것은 모든 대상 플랫폼에 따라 달라집니다 얼마나 중요한 자원이지만 여기에 우리가 간다 :

1) 자원

당신은 한 장면에서 모든 정상 장면과 전투 장면 물건을 올려 수있는 문제가 아닌 경우 .

  • 는 두 개의 빈 게임 오브젝트 (타운 장면 객체에 대한 하나의 배틀 장면 개체에 대한 다른)를 만듭니다. 그런 다음 게임 캐릭터 또는 게임 캐릭터의 두 가지 버전 ( )을 가질 수 있습니다. 그런 다음 번이 전투가 시작될 때 마을 장면에서 전투 장면으로 전환하고 경기가 끝날 때 마을 장면으로 돌아가는 스크립트를 작성하십시오.

  • 각 캐릭터의 버전이 하나있는 경우 게임 캐릭터 컨트롤러 의 동작을 전투 모드와 일반/타운 모드간에 변경하는 스크립트를 간단히 추가 할 수 있습니다.

  • 각 캐릭터의 버전이 두 개인 경우 해당 캐릭터 컨트롤러 스크립트를 작성하고 중 하나를 사용하여 게임 캐릭터를 활성화/비활성화해야합니다. 이것은 파이널 판타지 7,8,9와 같은 게임이 같은 효과를 얻는 방법입니다. 게임 캐릭터에는 두 가지 버전이 있습니다. 하나는 전투 모드 용이고 다른 하나는 일반 모드 용입니다.

2)) 자원 문제 내용입니다 (내가 더 효율적인 방법을 생각하는 경우

당신은 Application.LoadLevelAdditive 기능을 사용할 수 있습니다. 이 기능을 사용하면 다른 장면을로드 할 수 있으며 현재 장면의 모든 것을 파괴하지 않고 새로운 장면과 모든 장면을 가져 와서 현재 장면에 추가합니다. 그래서 기본적으로 당신은 이런 식으로 뭔가를 사용할 수 있습니다

  • 별도의 battlescene을 만들고 장면 내 장면에있는 모든 객체를 저장할 빈 게임 객체를 생성합니다.

  • noraml 장면에서 동일한 작업을 수행하십시오.

  • 당신이 전투 모드 사용에 갈 필요가

    :

    Application.LoadLevelAdditive ('battlescene을');

  • 그리고 전투 카드를 언로드하려면 전투 장면의 모든 것을 포함하고있는 전투 카드 게임 개체 을 파괴하라는 코드를 작성하면됩니다. 당신이 두 개의 서로 다른 캐릭터의 버전 여부를할지 여부를 결정할 수있는 첫 번째 방법과 마찬가지로

. 두 가지 버전의 장점 중 하나는 게임 모델과 세부 사항을 설정하지 않고 시간을 절약하려면 (특히 게임이 실제로 큰 경우) 마을 장면에 축소 된 모델을 사용하여 처리 능력을 당신의 전투 장면이 캐릭터가 싸우고있는 장소를 나타내는 작은 무대라고 가정 할 때, 전투 장면에 대해 연마 된보다 상세한 모델을 사용하십시오. 최종 판타지 VII라고 생각하십시오. 고려해야 할 것.

도움이 되었기를 바랍니다. 나는 그것을 서둘러 썼다. 그러나 무엇인가 정리해야하는지 안다.

+1

안녕하세요. 솔루션을위한 thx ... 시도해 보겠습니다. – Jason

+0

문제가 없지만 모두 잘되기를 바랍니다. 도움이 더 필요하면 소리 치십시오. – amasiye

0

이 글은 오래된 글이지만, 사용할 수있는 방법이 하나 더 있습니다. 이것은 장면의 상태를 저장하는 것입니다. 이 기능은 사용자가 Application.LoadLevelAdditive로 2 개의 장면을로드하는 데 필요한 리소스를 갖고 있지 않을 때 유용합니다. 이 방법은 잠재적으로 두 배의 자원을 사용할 수 있습니다.

상태를 저장하면 (파일 또는 DB로 변경할 수있는 모든 정보 저장) 나중에 레벨을로드 할 수 있으며 메모리에 저장하지 않아도됩니다. 게임을 저장할 때도 사용할 수 있습니다.

+0

장면 상태를 저장하는 방법에 대한 정보를 추가 할 수 있습니까? 당신의 대답은 기존의'SaveSceneState()'와'RestoreSceneState()'함수의 존재를 의미합니다. 이것은 Unity에서 기본적으로 존재하지 않는다고 생각합니다. – Thomas

4

당신은 C#을

void onYourFunction() 
{ 
    Time.timeScale = 0; //pauses the current scene 
    Application.LoadLevelAdditive("YourNextScene"); //loads your desired other scene 
} 

을에 스크립트에 의해 그것을 할 수 있습니다 그리고 당신은 다시 게임을 활성화 할 때 Time.timeScale = 1을 사용할 수 있습니다;

관련 문제