如何添加在Unity游戏中创建和实例化游戏对象的C#脚本

时间:2016-04-02 12:15:21

标签: unity3d unity5

我知道脚本是作为游戏对象的组件添加的,但我使用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);

    }

}

3 个答案:

答案 0 :(得分:2)

您有3个主要问题。这是你代码的流程。

1。您正在向Object类添加组件,而不是GameObject类。     AddComponent是GameObject的成员类。

  1. 与首要问题类似,因为您的hero是GameObject。您可以设置AddComponent成员。但事实是,它还没有获得实例化。

  2. Instiate是Object Class而不是GameObject类的成员,因此它返回一个Object类。

  3. 要解决。

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

答案 1 :(得分:1)

在实例化对象之前添加heroInstance.AddComponent<MonoBehaviour>(this);。这应该工作:)

答案 2 :(得分:0)

简单:你在场景中创建一个新的游戏对象,称之为(例如)&#34; Hero Spawner&#34;并附上你的&#34; TestingHeroPositions&#34;到了英雄水疗中心&#34;。

如果你想创建多个英雄,那就是要走的路,尽管你的脚本应该略有不同:

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对象本身(通过组件)决定它具有哪个精灵。如果那个精灵永远不会改变,也许只需将它添加到你的英雄预制件中。