0

我正在制作类似我的世界的 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);

它没有任何效果,为什么?

PS 我使用 UnityScript/JavaScript。

提前致谢!

4

2 回答 2

0

您不需要使用 Instantiate() 来创建新的空游戏对象。您只使用构造函数就可以做到这一点。要通过新组件填充 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);
于 2015-02-03T15:29:47.530 回答
0

我通过添加一个名为“blok”的标签来阻止GameObject并添加一个for循环来解决我的问题,然后该循环会更改每种类型的块的精灵(带有标签“blok”的游戏对象)。这是for循环代码:

    var go_list = GameObject.FindGameObjectsWithTag ("blok");

    for (var object in go_list) {
    }
于 2015-02-04T09:54:32.380 回答