Unity3d 使用精灵更改精灵。创建不生效?

Unity3d 使用精灵更改精灵。创建不生效?,unity3d,sprite,unityscript,gameobject,unity3d-2dtools,Unity3d,Sprite,Unityscript,Gameobject,Unity3d 2dtools,我正在制作一款类似于minecraft的2D游戏,除了在一块中改变块的纹理外,一切看起来都很好。以下是我尝试更改sprite的方式: var block = new GameObject("blok", typeof(SpriteRenderer), typeof(BoxCollider2D), typeof(CircleCollider2D)); block.GetComponent(SpriteRenderer).sprite = Sprite.Create(Resources.Load("

我正在制作一款类似于minecraft的2D游戏,除了在一块中改变块的纹理外,一切看起来都很好。以下是我尝试更改sprite的方式:

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);
它没有任何效果,为什么

另外,我使用UnityScript/JavaScript


提前谢谢

您不需要使用Instantiate()来创建新的空游戏对象。通过仅使用构造函数,您可以正确地执行此操作。要通过新组件填充游戏对象,请尝试使用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);

我解决了我的问题,添加了一个名为“blok”的标记到block GameObject,并添加了一个用于循环的标记,然后为每种类型的块(带有标记“blok”的GameObject)更改精灵。以下是循环代码:

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

    for (var object in go_list) {
    }
您需要使用instantiate()创建新的游戏对象