29294


自分で調べる限り調べたのですが、方法を見つけることができなかったので質問させてください。

現在、Unity5.4.1を用いて製作を行っています。  
プレハブを利用してゲームオブジェクトを複数個生成し、それらをそれぞれ別々の指定した場所へ移動させるということを目標としています。  
移動にはiTweenを利用して、移動終了後にはDestroyしています。

質問したいことは、「プレハブで共通しているスクリプトに別々の初期値を与えることはできるのか」ということです。

プレハブは以下のコードで生成しています。

[code]

    GameObject cap = Instantiate(CapsulePrefab, new Vector3(0,0,0), transform.rotation) as GameObject;
    
[/code]

`CapsulePrefab`は試しにプリミティブのカプセルをプレハブ化しただけのものです。  
紐付けされているスクリプトはitweenで移動させ、地点まで移動したら`Destroy(gameObject);`のみを記述しているメソッドを呼び出しています。

クラス・メソッド共にpublicにしている状態で、プレハブを生成する側のスクリプトから

[code]

    GameObject obj = Instantiate (prefab, new Vector3(0,0,0), transform.rotation) as GameObject;
    MyClass myClass = obj.GetComponent<MyClass>();
    myClass.Set(new Vector3(1,1,1);
    
[/code]

のように記述しても思ったように動作させることはできませんでした。  
また、パラメータを設定するような方法も見つけ、同様に試してみたのですがうまくいませんでした。

プレハブで初期値を外部から与えるということはできないのでしょうか。  
ご指導頂けると幸いです。  
質問が始めてのため、過不足があるかも知れませんがよろしくお願いします。


CC BY-SA 3.0
2016-10-01T17:11:55.577
29288
2016-10-02T01:35:39.443
2016-10-02T01:35:39.443
15185
18991
question
unity3d
PrefabのScriptに別々の初期値を与えたい


丸かっこが足りないのはコピペミスでしょうか？  
`myClass.Set(new Vector3(1,1,1);` → `myClass.Set(new Vector3(1,1,1));`

使用しているコードの一部しか分からないので推測ですが、  
`myClass.Set(new Vector3(1,1,1);`で渡したVector3型の値を`myClass`側で代入し忘れていませんか？

参考としてシンプルに、プレハブを生成して`Vector3`型の任意の値をインスタンス化した  
オブジェクトにSetして`Move()`で`transform.position`を変更するスクリプトを書いてみました。

こういうことではない、という場合は返信で情報を追加してください。

`PrefabManager`スクリプトをアタッチしたオブジェクトをシーンに配置し、  
プリミティブなCapsuleに、`MoveObject`スクリプトをアタッチしてプレハブ化しました。  
`PrefabManager`の`capsulePrefab`には上記のプレハブを設定しています。

PrefabManager

[code]

    using UnityEngine;
    using System.Collections;
    
    public class PrefabManager : MonoBehaviour {
        public GameObject capsulePrefab;
    
        void Start() {
            for (int i = 0; i < 10; i++) {
                GameObject obj = (GameObject) Instantiate(capsulePrefab, Vector3.zero, transform.rotation);
                MoveObject moveObject = obj.GetComponent<MoveObject>();
                moveObject.vec = new Vector3(2f * i, 0f, 0f);
                moveObject.Move();
            }
        }
    }
    
[/code]

MoveObject

[code]

    using UnityEngine;
    using System.Collections;
    
    public class MoveObject : MonoBehaviour {
        public Vector3 vec;
    
        public void Move(){
            Debug.Log("vec : " + vec);      
            transform.position = vec;
        }
    }
    
[/code]


CC BY-SA 3.0
2016-10-01T23:52:02.307
29294
2016-10-02T00:16:21.227
2016-10-02T00:16:21.227
18873
18873
29288
answer