2016-04-02 6 views
0

スクリプトはゲームオブジェクトにコンポーネントとして追加されていますが、C#スクリプトを使用してゲームオブジェクトを作成しています。これは私の簡単なテストゲームで唯一のゲームオブジェクトです。それを自分のゲームにどのように追加するのですか?以下のコードをご覧ください:Unityゲームでゲームオブジェクトを作成しインスタンス化するC#スクリプトを追加する方法

public class TestingHeroPositions : MonoBehaviour { 

GameObject hero; 
Sprite heroSprite; 

void Start() { 

    heroSprite = Resources.Load <Sprite> ("Sprites/heroImage"); 
    SpriteRenderer renderer = hero.AddComponent<SpriteRenderer>(); 
    renderer.sprite = heroSprite; 

    Camera camera = GetComponent<Camera>(); 
    Vector3 heroPosition = camera.ScreenToWorldPoint(new Vector3(Screen.width/2, Screen.height/2, camera.nearClipPlane)); 

    Instantiate (hero, heroPosition, Quaternion.identity); 

    } 

} 
+0

空のゲームオブジェクトを作成し、その上にスクリプトを配置します。 –

+0

'NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません.'' SpriteRenderer renderer = hero.AddComponent ();' – Jickery

+0

@Jickeryあなたのヒーローgameobjectがnullです...どちらかそれを公開してインスペクタで設定するか、 'GameObject.Find'を使用してください。 –

答えて

1

オブジェクトをインスタンス化する前に、heroInstance.AddComponent<MonoBehaviour>(this);を追加してください。これはうまくいかなければなりません:)

+0

いいえ、それはありません。オブジェクトはインスタンス化されておらず、GameObjectにキャストされていないためです。 – Aizen

+0

申し訳ありません、'heroInstance 'を追加してください。AddComponent (this); ' –

+0

あなたの答えを編集してください。私は投票を削除します。 – Aizen

0

シンプル:シーンに新しいゲームオブジェクトを作成して(たとえば)「Hero Spawner」と呼んで、「TestingHeroPositions」を「Hero Spawner」に付けます。

あなたが複数の英雄を作成したい場合は、あなたのスクリプトが若干異なるべきであるが、それは、移動するための方法である:

public class TestingHeroPositions : MonoBehaviour { 

    GameObject heroPrefab; 
    Sprite heroSprite; 

    void Start() { 
     Camera camera = GetComponent<Camera>(); 
     Vector3 heroPosition = camera.ScreenToWorldPoint(new Vector3(Screen.width/2, Screen.height/2, camera.nearClipPlane)); 

     // Instantiate a new instance of heroPrefab into the scene 
     var heroInstance = Instantiate (heroPrefab, heroPosition, Quaternion.identity); 

     // Only add the hero sprite renderer to THIS instance of the hero Prefab 
     heroSprite = Resources.Load <Sprite> ("Sprites/heroImage"); 
     SpriteRenderer renderer = heroInstance.AddComponent<SpriteRenderer>(); 
     renderer.sprite = heroSprite; 
    } 
} 

あなたが唯一のヒーローを作成したい場合は、あなたがさせる検討する必要がありますHeroオブジェクト自体(コンポーネントを介して)が持つスプライトを決定します。そのスプライトが決して変わらない場合は、おそらくあなたのヒーローのプレハブにそれを加えてください。

1

3つの大きな問題があります。あなたのコードの流れです。

1。あなたはクラスではなくObjectクラスにコンポーネントを追加しています。 AddComponentは、GameObjectのメンバークラスです。

  1. トップの問題と同様に、heroはGameObjectです。あなたはAddComponentのメンバーをそれに設定することができます。しかし、真実はまだインスタンス化されていないということです。

  2. InstiateはGameObjectクラスではないObjectクラスのメンバであるため、Objectクラスを返します。

解決します。

public class TestingHeroPositions : MonoBehaviour { 

GameObject hero; 
Sprite heroSprite; 

void Start() { 





    Instantiate (hero, heroPosition, Quaternion.identity) as GameObject; 
    //Instantiate first then type cast it to GameObject. Instiate returns Object not gameObject. 
    //No need for `new GameObject()` Constructor. 

    Camera camera = GetComponent<Camera>(); 
    Vector3 heroPosition = camera.ScreenToWorldPoint(new Vector3(Screen.width/2, Screen.height/2, camera.nearClipPlane)); 
heroSprite = Resources.Load <Sprite> ("Sprites/heroImage"); 
     SpriteRenderer renderer = hero.AddComponent<SpriteRenderer>(); 
     renderer.sprite = heroSprite; 

     } 

    } 
+0

ありがとう、 'heroPosition'を宣言せずに使用していますので、' NullReferenceException'エラーが発生します – Jickery

+0

あなたのコードでいくつかのエラーが発生しています – Jickery

関連する問題