2014-12-10 4 views
1

캔버스에 첨부 된 DialogueController이라는 스크립트가 있습니다. DialogueController 스크립트에서 캔버스를 인스턴스화하고 싶습니다. 이 작업을 시도 할 때마다 유니티 편집기를 통해 캔버스에 할당 된 모든 공용 객체가 null로 설정됩니다 (인스턴스화하려는 캔버스 자체 포함).해당 gameobject에있는 스크립트에서 gameobject를 인스턴스화하십시오.

간단한 방법이 있나요? 대체 솔루션이 있지만이 작업을 수행하면 코드가 약간 더 구획화 될 수 있습니다.

+0

'Instantiate()'또는 구어체'설정 값 및 준비 완료 '를 의미합니까? 나는 여기에 쓰여진 내용이 약간 혼란 스럽기 때문에 ... 이미 존재하는 것을 만들려고 노력하고 있기 때문에 묻습니다. = s ps [unity3d] 태그는 여기에 없습니다 [unity] :) – Lefty

+0

안녕하세요, 네, 인스턴스화를 의미합니다. 프리 팹은 이미 존재하지만 씬 자체에는 존재하지 않습니다. Canvas 자체에있는 DialogueController 스크립트를 사용하여 캔버스를 장면으로 가져 오려고합니다. – Archetype90

답변

1

resources folders (및 Resources.Load() 메소드)을 사용하여 스크립트 자체에서 이러한 변수를 초기화 할 수 있습니다. 뭐 그런 : 당신은 당신이 필요로하는 경우 더 복사본을 인스턴스화하는 스크립트가 포함 된 캔버스의 초기 "씨"예를 필요 같은 코멘트에서

//The canvas is at the path "Assets/Resources/canvas". 

function Start() { 
    your_canvas = Instantiate(Resources.Load("canvas")); 
} 
+0

훌륭함, 네, 이것이 최선의 해결책이라고 생각합니다. 무리 감사! – Archetype90

0

, 그것은 보인다. 제 2 부는 당신의 필요에 가장 일반적입니다.

가장 쉬운 방법은 말한 캔버스의 하나의 인스턴스를 이미 장면에 넣는 것입니다. 당신의

void Start() 
{ 
    thisCanvas = GetComponent<Canvas>(); 
    thisCanvas.enabled = true; 
} 

... 검사관의 작은 체크 박스를 unticking에 의해 "장애인"드로어 블/볼 캔버스 부분이 있고, 다음은 게임 오브젝트에 스크립트의 기능 자체를 활성화 할 수 물론, 또 다른 방법은 장면에 이미있는 다른 스크립트에서 하나의 복사본을 인스턴스화하는 것입니다. - 전형적인 경우 : 장면에서 빈 게임 객체 만들기 (Ctrl + Shift + N), [F2] 이름을 "GameManager" GameObject 이름에 공백이있을 경우 버그가 생겨서 GameManager라는 새 스크립트를 첨부하십시오.

using UnityEngine; 
using System.Collections; 

public class GameManager : MonoBehaviour 
{ 

    public GameObject myObject; 

    void Start() 
    { 
     Instantiate(myObject, transform.position, transform.rotation); 
    } 

} 

지금 드래그 : 이 스크립트는 반드시 올바른 장면 부하를 만들고, 특정 팹의 인스턴스를, 네트워크 연결을, 에디터 등 등 그래서에서 수행하지 않은 설정 플레이어 변수에 기본적으로 그냥 여기에있다 + 인스펙터에서 "GameManager"의 슬롯에 인스턴스화하려는 "프리 패브"를 드롭하십시오. 게임이 시작될 때 반드시 있어야 할 필요는 없다는 것을 기억하십시오. 또 다른 예는 로그인이 필요할 때마다 듣는 기능을 가진 GameManager 스크립트입니다. 그리고 그 시간에 로그인 대화 상자를 인스턴스화합니다.

+0

반가 웠습니다. 솔루션을 구현하기 전에 (귀하의 답장을보기 전에) 두 번째 솔루션을 구현했습니다. GameObject를 스크립트에 첨부하고 거기에서 인스턴스화했습니다. 두 가지 훌륭한 솔루션! – Archetype90