如何在不使用prefeb的情况下以编程方式创建精灵
本文关键字:情况下 编程 方式 精灵 创建 prefeb | 更新日期: 2023-09-27 18:19:16
好吧。我已经找了很长时间,但我得到的答案都是一样的,那就是我特别不想做的事情。
这是我的问题案例:
对于不同的精灵,我有不同类型的图像。我不确定sprites(images)
会有多大的不同。所以,我必须在运行时创建精灵并以编程方式应用纹理。
是否有一种方法可以创建精灵而无需创建静态prefeb ?
无论我在哪里寻找解决方案,每次我都得到相同的答案"创建一个prefeb",这是我不能做的。
请给我指路
你应该使用原始类型的游戏对象。是的,它们可以在不使用预制件的情况下创建。此外,如果你只是打算使用精灵,原始类型"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); } }
你可以根据你的需要改变比例。
可能是这样的,我试着从精灵表中加载1个精灵,但没有成功
public Sprite[] fruitSprites;
void Awake()
{
// load all frames in fruitsSprites array
fruitSprites = Resources.LoadAll<Sprite>("fruits");
}
void Start ()
{
// create the object
GameObject fruit = new GameObject();
// add a "SpriteRenderer" component to the newly created object
fruit.AddComponent<SpriteRenderer>();
// assign "fruit_9" sprite to it
fruit.GetComponent<SpriteRenderer>().sprite = fruitSprites[9];
// to assign the 5th frame
fruit.GetComponent<SpriteRenderer>().sprite = fruitSprites[5];
}
如何使用:
AnswerSprites.Add(Sprite.Create(answers[j].Texture, new Rect(0, 0, 100, 100), new Vector2(0, 0), 0.1f));