2014-12-09 2 views
2

Я довольно новый (очень новый, на самом деле менее 8 часов новый) для Unity 3D.Невозможно создать экземпляр поведения в единстве

Как оказалось, моя новизна Единства поставила меня с довольно странной проблемой. Рассмотрим два Behaviors ниже:

Behavior CamCaptureDialogBehavior:

using UnityEngine; 
using System.Collections; 

public class CamCaptureDialogBehavior : MonoBehaviour 
{ 
     // 200x300 px window will apear in the center of the screen. 
     private Rect windowRect = new Rect ((Screen.width - 200)/2, (Screen.height - 300)/2, 200, 300); 
     // Only show it if needed. 
     private bool show = false; 

     public CamCaptureDialogBehavior() 
     { 
     } 
     // Use this for initialization 
     void Start() 
     { 

     } 

     void OnGUI() 
     { 
       if (show) 
         windowRect = GUI.Window (0, windowRect, DialogWindow, "Game Over"); 
     } 

     void DialogWindow (int windowID) 
     { 
       float y = 20; 
       GUI.Label (new Rect (5, y, windowRect.width, 20), "Title goes here"); 

       if (GUI.Button (new Rect (5, y, windowRect.width - 10, 20), "Ok")) { 
         Application.LoadLevel (0); 
         show = false; 
       } 
     } 

     // To open the dialogue from outside of the script. 
     public void Open() 
     { 
       show = true; 
     } 
     // Update is called once per frame 
     void Update() 
     { 

     } 
} 

Поведение: PictureButtonBehavior:

using UnityEngine; 
using UnityEditor; 
using System.Collections; 

public class PictureButtonBehavior : MonoBehaviour 
{ 
     private bool displayedGUI = false; 
     private bool ShowThisGUI = false; 

     void Start() 
     { 
     } 

     void Update() 
     { 
       if (displayedGUI == true) { 
         Debug.Log (string.Format ("displayedGUI = {0}\r\n", displayedGUI)); 
         displayedGUI = false; 
         ShowThisGUI = false; 
       } 
     } 

     void OnGUI() 
     { 
       if (ShowThisGUI) { 
         Debug.Log (string.Format ("ShowThisGUI = {0}\r\n", ShowThisGUI)); 
         displayedGUI = true; 
         ShowThisGUI = false; 
         CamCaptureDialogBehavior ccdb = new CamCaptureDialogBehavior(); 
         if (ccdb != null) { 
           ccdb.enabled = true; 
           ccdb.Open(); 
         } 
       } 
     } 

     public void OnClick() 
     { 
       ShowThisGUI = true; 
     } 
} 

В CamCaptureDialogBehavior ccdb = new CamCaptureDialogBehavior();, ccdb всегда null.

Есть ли способ unqiue для создания экземпляров классов в Unity/Mono?

или, как я могу создать CamCaptureDialogBehavior в PictureButtonBehavior и иметь возможность отображать диалоговое окно, представленное CamCaptureDialogBehavior.

+1

Если это происходит от Monobehaviour, не используйте новые. Использовать intiantiate -> http://docs.unity3d.com/ScriptReference/Object.Instantiate.html – OMGtechy

+0

Я попытался использовать initiate, но для использования initiate мне нужно иметь начальное значение в первую очередь. Он по-прежнему возвращает мне null. – Abhinav

+1

Вы можете использовать Resources.Load, если у вас нет экземпляра для клонирования :) – OMGtechy

ответ

1

Вы не можете позвонить по телефону new по телефону MonoBehaviours.

Вы можете создать экземпляр сборника, который имеет прикрепленный к ним сценарий.

GameObject g = Instantiate(prefab) as GameObject; 

Или вы можете добавить их в уже существующий GameObject.

gameObject.AddComponent<ScriptName>(); 

Далее вы спросите , что является сборным. Это нечто очень простое, но очень сильное в Единстве. Short tutorial о том, как это сделать.

Вы можете создать сборный выбрав Asset> Создать префаб, а затем перетаскивание объекта из сцены на «пустой» сборный актив, который появляется. Просто перетащив объект prefab из представления проекта в вид сцены , вы создадите экземпляры сборника.

+0

Я не мог заставить это работать (слишком новичок: P), но спасибо, указав мне нужные ресурсы. Я исправил проблему, но динамически создавал вдова. – Abhinav