如何在不使用prefeb的情况下以编程方式创建精灵

本文关键字:情况下 编程 方式 精灵 创建 prefeb | 更新日期: 2023-09-27 18:19:16

好吧。我已经找了很长时间,但我得到的答案都是一样的,那就是我特别不想做的事情。

这是我的问题案例:

对于不同的精灵,我有不同类型的图像。我不确定sprites(images)会有多大的不同。所以,我必须在运行时创建精灵并以编程方式应用纹理。

现在,我不能使用前缀,因为它会限制我可以使用的不同精灵的数量。而且,在游戏中改变一个精灵prefeb实例的纹理,将会改变所有的精灵prefeb,这在我的情况下是不可接受的。

是否有一种方法可以创建精灵而无需创建静态prefeb ?

无论我在哪里寻找解决方案,每次我都得到相同的答案"创建一个prefeb",这是我不能做的。

请给我指路

如何在不使用prefeb的情况下以编程方式创建精灵

你应该使用原始类型的游戏对象。是的,它们可以在不使用预制件的情况下创建。此外,如果你只是打算使用精灵,原始类型"Plane"也会做同样的事情。

尝试以下操作:-

  1. 在你的场景中创建一个空的游戏对象,并将其重新定位到(0,0,0)
  2. 将以下代码附加到这个空游戏对象

    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));
相关文章: