使用Sprite.Create更改精灵不会生效?

时间:2015-02-02 20:49:19

标签: unity3d sprite unityscript gameobject unity3d-2dtools

我正在制作类似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。

提前致谢!

2 个答案:

答案 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) {
    }