嗯。 。我已经找了很长一段时间,但到处都得到相同的答案,这是我特别不想做的。
这是我的问题案例:
我有不同类型的图像用于不同的 Sprite 。我不确定我必须展示多少不同的sprites(images)
。因此,我必须创建 Sprite 并在运行时以编程方式应用纹理。
现在,我绝对不能使用prefebs,因为它会限制我可以使用的不同 Sprite 的数量。而且,更改游戏中一个 Sprite 预置实例的纹理将更改所有 Sprite 预置,这在我的情况下是 Not Acceptable 。
有没有一种方法可以创建 Sprite 而无需创建静态预置?
无论我在哪里寻找解决方案,每次我都会得到相同的答案“创建预置”,这在我的情况下是无法完成的。
请引导我走向正确的方向。
最佳答案
您应该使用原始类型的游戏对象。是的,它们可以在不使用预制件的情况下创建。 另外,如果您正要使用 Sprite ,原始类型“Plane”将执行您想要的相同操作。
尝试以下操作:-
- 在场景中创建一个空的游戏对象,并将其重新定位到 (0,0,0)
将包含以下代码的脚本附加到此空游戏对象
public int numberOfTiles=16; Vector3 TilePosition; void Start () { TilePosition = Vector3.zero; for (int i = 1; i<=numberOfnumberOfTiles; i++) { GameObject temp = GameObject.CreatePrimitive(PrimitiveType.Plane); temp.name = "Tile_"+i; temp.transform.position = TilePosition; temp.transform.Rotate(90f,180f,0,Space.World); temp.transform.localScale = new Vector3(0.66f,1f,0.66f); temp.transform.parent = transform; Texture2D tex =(Texture2D) Resources.LoadAssetAtPath("Assets/Resources/Texture/Tile"+i,typeof(Texture2D)); temp.renderer.material.mainTexture = new Texture2D (640, 960, TextureFormat.ARGB32, false); temp.renderer.material.mainTexture = tex; TilePosition = new Vector3(TilePosition.x,TilePosition.y+(temp.transform.localScale.y*6.59f),TilePosition.z); } }
您可以根据需要更改比例。
希望这有帮助。
关于c# - 如何在不使用预制件的情况下以编程方式创建 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25485026/