我正在制作类似Minecraft的2D游戏,除了在一个块中更改块纹理外,一切似乎都没问题。这就是我尝试更改精灵的方法:
var block = new GameObject("blok", typeof(SpriteRenderer), typeof(BoxCollider2D), typeof(CircleCollider2D));
block.GetComponent(SpriteRenderer).sprite = Sprite.Create(Resources.Load("/Prefabs/Blokovi/blok_zemlja") as Texture2D, Rect(0, 240, 16, 16), Vector2(0.5, 0.5), 16);
它没有任何效果,为什么?
P.S。我使用UnityScript / JavaScript。
提前致谢!
答案 0 :(得分:0)
您不需要使用Instantiate()来创建新的空GameObject。您只使用构造函数正确执行此操作。要通过新组件填充GameObject,请尝试使用 AddComponent()方法,而不是将类型放入构造函数。返回类型的方法是Component,因此您可以轻松获得对刚添加的组件的引用。小例子:
var block = new GameObject("block");
block.AddComponent("BoxCollider2D");
block.AddComponent("CircleCollider2D");
var spriteRenderer = block.AddComponent("SpriteRenderer");
spriteRenderer.sprite = Sprite.Create(Resources.Load("/Prefabs/Blokovi/blok_zemlja") as Texture2D, Rect(0, 240, 16, 16), Vector2(0.5, 0.5), 16);
答案 1 :(得分:0)
我通过添加一个名为“blok”的标签来解决我的问题,阻止GameObject并添加一个for循环,然后为每种类型的块更改精灵(带有标记“blok”的游戏对象)。这是循环代码:
var go_list = GameObject.FindGameObjectsWithTag ("blok");
for (var object in go_list) {
}