Unity在运行时以随机位置创建精灵

时间:2016-06-13 14:31:15

标签: c# unity3d

我试图在屏幕上以随机位置生成一个二维图像精灵:

        tex = Resources.Load<Texture2D>("pig") as Texture2D;
        Sprite sprite = new Sprite();
        sprite = Sprite.Create(tex, new Rect(0, 0, 250, 150), new Vector2(Random.Range(-1.5f, 1.5f), Random.Range(-1.5f, 1.5f)));
        GameObject newSprite = new GameObject();
        newSprite.AddComponent<Rigidbody2D>();
        newSprite.GetComponent<Rigidbody2D>().gravityScale = 0f;
        newSprite.AddComponent<ObjectMovement>();
        newSprite.AddComponent<SpriteRenderer>();
        SR = newSprite.GetComponent<SpriteRenderer>();
        SR.sprite = sprite;

然而,精灵的位置不准确,并且它在一个很小的区域产生,我希望它在屏幕的任何一点,我的随机范围应该是什么?

1 个答案:

答案 0 :(得分:1)

您必须使用Camera.main.ViewportToWorldPoint查看转换为世界点,然后您可以将 0 用于 1 .5 为中间点来表示屏幕尺寸。

请勿尝试从Sprite.Create更改位置。在创建精灵后执行此操作。删除该行代码中的随机代码。唯一要补充的是

newSprite.transform.position = Camera.main.ViewportToWorldPoint(new Vector3(Random.Range(0f, 1f), Random.Range(0f, 1f), Camera.main.nearClipPlane + 15f));

我将使用您上一个问题的代码来回答,以确保您当前的代码中没有其他问题。经过测试并且有效。

Texture2D tex = Resources.Load<Texture2D>("pig") as Texture2D;
Sprite sprite = new Sprite();
sprite = Sprite.Create(tex, new Rect(0, 0, 250, 150), new Vector2(0.5f, 0.5f), 40);
GameObject newSprite = new GameObject();
newSprite.AddComponent<Rigidbody2D>();
newSprite.GetComponent<Rigidbody2D>().gravityScale = 0f;
//newSprite.AddComponent<ObjectMovement>();
newSprite.AddComponent<SpriteRenderer>();
SR = newSprite.GetComponent<SpriteRenderer>();
SR.sprite = sprite;
SR.transform.position = Camera.main.ViewportToWorldPoint(new Vector3(Random.Range(0f, 1f), Random.Range(0f, 1f), Camera.main.nearClipPlane));