2016-04-02 37 views
0

一個遊戲對象我知道腳本添加組件的遊戲對象的C#腳本,但我一直在使用C#腳本創建一個遊戲對象。這是我簡單測試遊戲中唯一的遊戲對象。我應該如何「添加」到我的遊戲中?請參閱下面的代碼:如何添加,創建和實例化在Unity遊戲

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

創建一個空的gameobject並將腳本放在上面。 –

+0

我得到一個'的NullReferenceException:對象沒有設置爲指向線'SpriteRenderer渲染= hero.AddComponent ()的object'錯誤的實例;' – Jickery

+0

@Jickery你的英雄遊戲對象爲空...要麼使其公開並設置在檢查員或使用'GameObject.Find' –

回答

1

在實例化對象之前添加heroInstance.AddComponent<MonoBehaviour>(this);。這應該工作:)

+0

不,它不會。因爲該對象不是實例化的,並且它不會被輸出到GameObject。 – Aizen

+0

對不起,加入'heroInstance。AddComponent (this);' –

+0

編輯你的答案。我將取消投票。 – Aizen

0

簡單:你在場景中創建一個新的遊戲對象,調用它(例如)「英雄產卵」,並附上「TestingHeroPositions」到「英雄產卵」。

如果你想創建多個英雄,這是要走的路,但你的腳本應該是略有不同:

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

如果你只是想創建一個英雄,你可能要考慮讓英雄對象本身(通過組件)決定它有哪個精靈。如果這個精靈永遠不會改變,也許只需將它添加到你的英雄預製。

1

您有3個主要問題。這是你的代碼的流程。

1。您正在向Object類添加組件,而不是GameObject類。 AddComponent是GameObject的成員類。

  1. 像頂級問題一樣,因爲你的hero是一個GameObject。您可以設置AddComponent成員。但事實是,它還沒有獲得實例化。

  2. Instiate是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