2017-10-16 2 views
0

私は、プレハブフォルダからプレハブを選択してゲームに追加し、必要に応じてそのプレハブのプロパティを設定できるようにする関数をC#で作成しようとしています。機能私が今持っている:Unity2D C# - 万能プレハブインスタンシエーターを作成するには?

public void loadObject(string objReference, float xPos, float yPos){ 
    Instantiate(Resources.Load<GameObject>(objReference),xPos,yPos); 

    //I want access to the prefabs properties 
} 

私も関数を呼び出すと、私のクラスのどこからでもプレハブをロードすることができます:それはそれは、私が関数に渡しただけで文字列

loadObject ("Prefab/BeamPlatform", this.transform.position.x, this.transform.position.y); 

たとき

public void loadObject(string objReference){ 
    Instantiate(Resources.Load<GameObject>(objReference)); 
} 

// 

loadObject ("Prefab/BeamPlatform"); 

をしかし、すぐに、私はプレハブの位置を制御しようとして、私はエラーのカップルを取得:働い

enter image description here

私は引数を間違って渡していますか?私は間違って何をしていますか?これは実際に可能ですか?私はAS3でこれを行うために使用することだし、それはように簡単だった:私はクラスレベルの変数を設定し、インスペクタでその上にプレハブをドラッグ避けるためにしようとしている

public function loadObject(objClass, xPos:Number, yPos:Number){ 
    var obj = new objClass(); 
    obj.x = xPos; 
    obj.y = yPos; 
    obj.otherProperty = ; 
} 

。私はそれが私の選択肢を制限するように感じますが、私は何かアドバイスを聞いています。

Here's what it looks like when it works with just a string passed

答えて

3

インスタンス化関数に正しいパラメーターを提供していないので、あなたは、エラーが発生します。 docを読むことをお勧めします。

Instantiate(Object original, float position, float rotation); 

xPosyPosは両方floatsをしているためだ。

Instantiate(Object original, Vector3 position, Quaternion rotation); 

これは、あなたがそれを使用しようとしている方法がある:これは、それがどのように見えるかです

。両方をVector3に変換してからInstantiate関数に渡す必要があります。

これは動作するはずです:

public void loadObject(string objReference, float xPos, float yPos) 
{ 
    Vector3 tempVec = new Vector3(xPos, yPos, 0); 
    Instantiate(Resources.Load<GameObject>(objReference), tempVec, Quaternion.identity); 

    //I want access to the prefabs properties 
} 

をまた、あなたがインスタンス化さプレハブプロパティにアクセスする必要がある場合、あなたはInstantiate関数が返されたオブジェクトを取得し、一時的な変数に格納する必要があります。

public void loadObject(string objReference, float xPos, float yPos) 
{ 
    Vector3 tempVec = new Vector3(xPos, yPos, 0); 
    GameObject obj = Instantiate(Resources.Load<GameObject>(objReference), tempVec, Quaternion.identity); 

    //I want access to the prefabs properties 
    Debug.Log(obj.transform.position); 

    string val = obj.GetComponent<YourScriptName>().yourPropertyName; 
    obj.GetComponent<YourScriptName>().yourFunctionName(); 
} 
関連する問題