我知道脚本是作为游戏对象的组件添加的,但我使用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 :(得分:2)
您有3个主要问题。这是你代码的流程。
1。您正在向Object
类添加组件,而不是GameObject
类。
AddComponent
是GameObject的成员类。
与首要问题类似,因为您的hero
是GameObject。您可以设置AddComponent
成员。但事实是,它还没有获得实例化。
Instiate是Object
Class而不是GameObject类的成员,因此它返回一个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;
}
}
答案 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对象本身(通过组件)决定它具有哪个精灵。如果那个精灵永远不会改变,也许只需将它添加到你的英雄预制件中。