C# can';无法使用脚本从空游戏对象获取变量

C# can';无法使用脚本从空游戏对象获取变量,c#,unity3d,gameobject,C#,Unity3d,Gameobject,我试图从一个空游戏对象的脚本中获取变量,但我无法在检查器上分配该游戏对象。这些是我游戏中的屏幕截图和代码 嗯,游戏开始时我要加载这个代码。土地和王子是由此代码生成的对象 using UnityEngine; using System.Collections; using System; using System.Collections.Generic; using System.Runtime.Serialization.Formatters.Binary; using System.IO;

我试图从一个空游戏对象的脚本中获取变量,但我无法在检查器上分配该游戏对象。这些是我游戏中的屏幕截图和代码

嗯,游戏开始时我要加载这个代码。土地和王子是由此代码生成的对象

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);
                    }
                }
            }

        }
    }
}
使用UnityEngine;
使用系统集合;
使用制度;
使用System.Collections.Generic;
使用System.Runtime.Serialization.Formatters.Binary;
使用System.IO;
公共类loadGame:单行为
{
公共静态loadGame loadSave;
公共游戏对象对象;
公共潘格兰查普林斯;
公共改革;
公共雪碧[]雪碧塔纳;
公共字典myTanah=新字典();
公共字典yobjtanah=新字典();
公共塔纳·提塔纳;
公共游戏对象tempObjTanah;
公共交通;
公共浮动mapX;
公众浮标;
公共整数i=0;
公共int j=0;
公共整数行=9;
公共int列=9;
无效唤醒(){
if(loadSave==null)
{
DontDestroyOnLoad(游戏对象);
loadSave=this;
}
else if(loadSave!=此)
摧毁(游戏对象);
}
//用于初始化
无效开始()
{
荷载();
}
//每帧调用一次更新
无效更新()
{       
}
公共空荷载()
{
if(File.Exists(Application.persistentDataPath+“/playerInfo.dat”))
{
}
其他的
{
charPrince=新的Pangeran(“Prince”,“04Okt1993”,0,0,0,0,0,false,false);
objPrince=GameObject.Instantiate(prefPrince,newvector3(0,0,0),Quaternion.identity)作为GameObject;
//objPrince.name=“Prince”;
charPrince.locationY=0f;
charPrince.locationX=0f;
charPrince.hadapAtas=假;
charPrince.hadapKanan=true;
耐力=100f;
charPrince.exp=0f;
charPrince.speed=0f;
对于(i=0;i对于(j=0;j=1&&j>=1&&i您是否曾将
planningscript.loadLand
设置为
loadGame.loadSave
的实例?在您的情况下,必须在
Awake
之后执行此操作,以确保已设置了该实例

我能问一下,你想做什么


你只需在plantingScript的inspector中指定你加载游戏脚本,而不使用任何静态。它们迟早会咬你的屁股(我猜已经是了)。

也有类似的问题。没有找到简单明了的解决方案。可能是我帮了你的忙

  • 创建空的游戏对象
  • 将loadGame.cs附加到它(如果您不想控制脚本何时启动-取消选中它,在这种情况下,请不要忘记在需要时在plantingScript中将loadLand.enabled设置为true)
  • 将此对象拖动到loadLand字段

  • 问题在于loadLand变量的类型为LoadGame,它是一个脚本。您要做的是向该变量添加GameObject。因此将公共变量类型更改为

    public GameObject LoadLandObject;
    private LoadGame loadLand;
    
    并创建一个私有LoadGame变量,该变量是对脚本的引用。 添加Start()方法

    loadLand=(LoadGame)LoadLandObject.GetComponent();
    

    这样,您就可以将GameObject的脚本LoadGame加载到变量中。

    并且您没有这个文件
    Application.persistentDataPath+“/playerInfo.dat”
    对吗?
    loadLand = (LoadGame)LoadLandObject.GetComponent<LoadGame>();