使用 Sprite.Create 更改精灵不生效?
Changing sprites using Sprite.Create does not take effect?
我正在制作类似 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.
提前致谢!
您不需要使用 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" 的标签来阻止 GameObject 并添加一个 for 循环来解决我的问题,该循环然后为每种类型的块(带有标签 "blok" 的游戏对象)更改精灵。这是 for 循环代码:
var go_list = GameObject.FindGameObjectsWithTag ("blok");
for (var object in go_list) {
}
我正在制作类似 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.
提前致谢!
您不需要使用 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" 的标签来阻止 GameObject 并添加一个 for 循环来解决我的问题,该循环然后为每种类型的块(带有标签 "blok" 的游戏对象)更改精灵。这是 for 循环代码:
var go_list = GameObject.FindGameObjectsWithTag ("blok");
for (var object in go_list) {
}