
[code]

    int enemyIndex = Random.Range(0, m_enemyList.Length);
    var enemyObject = Instantiate(m_enemyList[enemyIndex], new Vector3(0, 3, 0), transform.rotation) as GameObject;
    
    var background2 = GameObject.FindGameObjectWithTag("background");
    enemyObject.transform.SetParent(background2.transform, false);
    
[/code]

こんなかんじでランダムに生成しています。destroy.csというものを作成し、  
destroy(生成したprefab)に条件を加えHPが０になると破壊するようにしています

その際、HPを管理しているのは別のcsなので(enemy.csとする）destroy.csにenemy.csを  
アタッチしたいのですが、sceneを選択できないため、アタッチできない状況です

生成するインスタンス（prefab)がヒエラルキー上にない、  
project上にあるのが原因でしょうか


CC BY-SA 3.0
2015-11-26T06:04:59.837
19319
2016-08-30T08:37:47.683
2015-11-26T06:29:03.403
7290
9268
question
c# unity3d
生成したインスタンスにアタッチする方法


ご質問の内容を読み取れてなかったらごめんなさい。

題名や質問文から、「インスタンス」と「プレハブ」の用語の使い方に混同が見られるように思います。  
コンポーネント(質問文のenemy.csやdestroy.cs)を追加したいのは、プレハブ(Project
Viewにあるプレハブアセット)に対してでしょうか？  
もしくはプレハブから生成したインスタンス(例えば質問文のenemyObject)に対してでしょうか？

プレハブにコンポーネントを追加するには、Project Viewにあるプレハブをクリックしてから、表示されたインスペクター上でコンポーネントを追加します。

そうではなく、題名通りに「インスタンスにコンポーネントをアタッチする方法」であれば、

[code]

    enemyObject.AddComponent<(destroy.csやenemy.csに書かれたコンポーネントの名前)>()
    
[/code]

のようにすればコンポーネントを追加できます。

質問文に

> 生成するインスタンス（prefab)がヒエラルキー上にない、  
>  project上にあるのが原因でしょうか

とありましたので、おそらく前者(プレハブアセットにコンポーネントを追加する方法)だと考えましたが、念のため後者(インスタンスにコンポーネントを追加する方法)も書きました。

**2015-11-27 16:08追記**  
もしかして、destoryコンポーネントのインスペクターのEnemyに対して、Project
Viewにあるenemy.csをドラッグアンドドロップして関連付けようとしていますか？

Enemyにドロップ可能なのは、ヒエラルキー上のインスタンス(GameObject)か、またはProject
Viewにあるプレハブです。ですので、予めenemyコンポーネントを追加済みのGameObjectまたはプレハブを用意しておいてから、Enemyに対してドラッグアンドドロップすれば関連付けられると思います。

もし関連付けに成功したならば、Enemyの割当先の表示が「(GameObject名またはプレハブ名)
(enemy)」と変わるはずです。この表示は「GameObjectまたはプレハブに追加されたenemyコンポーネントを参照している」という意味です。


CC BY-SA 3.0
2015-11-26T11:20:21.233
19334
2015-11-27T07:27:15.857
2015-11-27T07:27:15.857
3783
3783
19319
answer