我正在2D游戏中为农田创建预制件。由于我希望所有的地砖在用锄头撞击时变成可耕地,我担心性能(因为场景中会有数百个这样的游戏对象)。
最好的办法是破坏地面图块并在其位置实例化一个农场图块,还是最好创建一个附加到每个地面图块(?)的更通用的脚本,其状态如下: / p>
GROUND, FARMABLE, PLANTED
,然后根据状态我改变行为并设置一个精灵,如:tile.GetComponent<Image>().sprite = Resources.Load<Sprite>(pathToSprite);
也许我错过了一个更好的选择,但这些是我能想到的。
答案 0 :(得分:2)
在运行期间销毁和实例化数百个游戏对象是导致灾难,内存碎片和GC疯狂的一个因素,这会破坏性能。
第二种解决方案更好。对游戏逻辑中磁贴的所有可能状态使用enum
,然后相应地更改Sprite
组件的Sprite Renderer
字段。
PSA:每次需要更改精灵时都不要使用GetComponent
和Resources.Load
,请参考Sprite Renderer
组件和Sprite[]
包含要在Awake
中使用的所有可能状态图像的数组,然后在需要时使用这些引用来更改精灵图像。
编辑:在评论中回答您的问题。
Sprites
全部位于您的Resources
文件夹中
项目,它们可以在子文件夹中,即:Resources/Sprites
。path
字符串是否正确,即如果精灵资产被调用Circle
,并且它在Resources/Sprites
文件夹中,
path
必须为"Sprites/Circle"
。代码示例:
public class MyClass : MonoBehaviour {
Sprite[] spritesArray = new Sprite[10];
void Awake() {
spritesArray[0] = Resources.Load<Sprite>("Sprites/Circle");
}
}
答案 1 :(得分:-2)
试试这个:{tile.GetComponent(/)。sprite = Resources.Load(pathtosprite); }