2

空のゲーム オブジェクトのスクリプトから変数を取得しようとしていますが、そのゲーム オブジェクトをインスペクタに割り当てることができません。これらは私のゲームのスクリーン ショットとコードです。

さて、ゲームの開始時にロードするこのコードがあります。Land と Prince は、このコードから作成されたオブジェクトです。

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

        }
    }
}

上記のコードからいくつかの変数の 1 つにアクセスしようとしていますが、インスペクターで割り当てることができません。

このコードで上記のコードを割り当てたい

しかし、私はそれを行うことはできません。 そしてこれが起こった

私を助けてください。ありがとうございました。

4

3 に答える 3

2

問題は、loadLand 変数がスクリプトである LoadGame 型であることです。あなたがやろうとしているのは、この変数に GameObject を追加することです。したがって、パブリック変数の型を次のように変更します

public GameObject LoadLandObject;
private LoadGame loadLand;

スクリプトへの参照であるプライベートな LoadGame 変数を作成します。Start() メソッドを追加する

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

これで、GameObject のスクリプト LoadGame を変数にロードします。

于 2014-10-21T09:35:37.373 に答える
0

plantingScript.loadLandのインスタンスに設定したことはありますloadGame.loadSaveか? これはAwake、インスタンスが設定されていることを確認するために、ケースの後に行う必要があります。

聞いてもいいですか、何をしようとしていますか?

plantingScript のインスペクターで loadGame スクリプトを割り当てるだけで、statics はまったく使用しないでください。彼らは遅かれ早かれあなたのお尻を噛むでしょう(そして私はそれがすでにあると推測しています).

于 2014-10-20T15:21:05.317 に答える
0

同様の問題があります。シンプルで明確な解決策が見つかりませんでした。私があなたを助けたのかもしれません。

  1. 空のゲーム オブジェクトを作成します。
  2. それに loadGame.cs をアタッチします (スクリプトの開始時に制御する場合は、チェックを外します。この場合、必要に応じて plantingScript で loadLand.enabled を true に設定することを忘れないでください)。
  3. このオブジェクトを loadLand フィールドにドラッグします

サンプルプロジェクト

于 2014-10-20T15:26:02.147 に答える