2014-10-20 57 views
1

我想從一個空的gameObject的腳本獲取變量,但我不能在檢查器上分配該gameObject。這些是我的遊戲的屏幕截圖和代碼。無法從一個空的遊戲對象與腳本變量

嗯,我有這個代碼加載時,遊戲開始。土地和王子是由此代碼製成的物體。

using UnityEngine; 
using System.Collections; 
using System; 
using System.Collections.Generic; 
using System.Runtime.Serialization.Formatters.Binary; 
using System.IO; 


public class loadGame : MonoBehaviour 
{ 
    public static loadGame loadSave; 

    public GameObject objPrince; 
    public Pangeran charPrince; 
    public Transform prefPrince; 

    public Sprite[] spriteTanah; 
    public Dictionary<string, Tanah> myTanah = new Dictionary<string, Tanah>(); 
    public Dictionary<string, GameObject>objTanah = new Dictionary<string, GameObject>(); 
    public Tanah tempTanah; 
    public GameObject tempObjTanah; 
    public Transform prefTanah; 
    public float mapX; 
    public float mapY; 
    public int i = 0; 
    public int j = 0; 
    public int rows = 9; 
    public int column = 9; 

    void Awake(){ 
     if(loadSave == null) 
     { 
      DontDestroyOnLoad(gameObject); 
      loadSave = this; 
     } 
     else if(loadSave != this) 
      Destroy(gameObject); 

    } 

    // Use this for initialization 
    void Start() 
    { 
     Load(); 
    } 

    // Update is called once per frame 
    void Update() 
    {  
    } 

    public void Load() 
    { 
     if(File.Exists(Application.persistentDataPath + "/playerInfo.dat")) 
     { 

     } 
     else 
     { 
      charPrince = new Pangeran ("Prince", "04Okt1993", 0, 0, 0, 0, 0, false, false); 
      objPrince = GameObject.Instantiate (prefPrince, new Vector3 (0, 0, 0), Quaternion.identity) as GameObject; 
      //objPrince.name = "Prince"; 
      charPrince.locationY = 0f; 
      charPrince.locationX = 0f; 
      charPrince.hadapAtas = false; 
      charPrince.hadapKanan = true; 
      charPrince.stamina = 100f; 
      charPrince.exp = 0f; 
      charPrince.speed = 0f; 

      for(i = 0 ; i < rows ; i ++) 
      { 
       for(j = 0; j<column ; j++) 
       { 
        mapX = (i-j) * 0.8f; 
        mapY = (i+j) * 0.4f; 

        if(i>=1 && j>=1 && i<=5 && j<=5) 
        { 
         prefTanah.name = "land-"+j.ToString("0#")+"-"+i.ToString("0#"); 
         tempTanah = new Tanah("land-"+j.ToString("0#")+"-"+i.ToString("0#"),mapX,mapY,"land",spriteTanah[0],spriteTanah[1],spriteTanah[2]); 
         myTanah.Add("land-"+j.ToString("0#")+"-"+i.ToString("0#"),tempTanah); 
         tempObjTanah = GameObject.Instantiate(prefTanah, new Vector3(mapX,mapY,0),Quaternion.identity)as GameObject; 
         objTanah.Add("land-"+j.ToString("0#")+"-"+i.ToString("0#"),tempObjTanah); 
        } 
        else 
        { 
         prefTanah.name = "snow-"+j.ToString("0#")+"-"+i.ToString("0#"); 
         tempTanah = new Tanah("snow-"+j.ToString("0#")+"-"+i.ToString("0#"),mapX,mapY,"snow"); 
         myTanah.Add("snow-"+j.ToString("0#")+"-"+i.ToString("0#"),tempTanah); 
         tempObjTanah = GameObject.Instantiate(prefTanah, new Vector3(mapX,mapY,0),Quaternion.identity)as GameObject; 
         objTanah.Add("snow-"+j.ToString("0#")+"-"+i.ToString("0#"),tempObjTanah); 
        } 
       } 
      } 

     } 
    } 
} 

我試圖訪問從上面的代碼中的一些變量中的一個,但我不能在檢查分配給它。

I want to assign that code above in this code

,但我不能這樣做。 and this is happened

請幫幫我。謝謝。

+0

而你沒有這個文件'Application.persistentDataPath +「/playerInfo.dat」'對嗎? – AlexanderBrevig 2014-10-20 15:14:39

回答

1

的問題是,所述loadLand變量的類型LoadGame這是一個腳本的。你想要做的是向這個變量添加一個GameObject。因此,將公共變量類型更改爲

public GameObject LoadLandObject; 
private LoadGame loadLand; 

並創建一個私人LoadGame變量,它是對腳本的引用。 添加在開始()方法

loadLand = (LoadGame)LoadLandObject.GetComponent<LoadGame>(); 

有了這個,你加載遊戲對象的腳本LoadGame到變量。

0

您是否曾將plantingScript.loadLand設置爲loadGame.loadSave的實例?在你的情況下,這必須在Awake之後完成,以確保實例已被設置。

我可以問,你想做什麼?

你應該只是簡單地在plantScript的inspector中指派你的loadGame腳本,而不是使用靜態的。他們遲早會咬你的屁股(我猜測它已經是)。

0

也有類似的問題。沒有找到簡單明瞭的解決方案。可能是我對你的幫助。

  1. 創建空的遊戲對象。
  2. 附加loadGame.cs它(如果你whant控制時,腳本啓動 - 取消它,在這種情況下,不要foget loadLand.enabled在plantingScript需要時設置爲true)
  3. 將這個對象來你loadLand字段

Sample project

+0

我做到了,但它不起作用 – dwinaandrea 2014-10-20 15:44:44

+0

爲你做一個樣品。它工作正常 – vsenik 2014-10-20 16:56:17