【问题标题】:Unity create sprite at runtime in random positionUnity 在运行时在随机位置创建精灵
【发布时间】:2016-06-14 01:18:40
【问题描述】:

我正在尝试在屏幕中随机位置生成 2d 图像精灵:

        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;

但是,精灵的位置不准确,它生成在一个很小的区域,我希望它在屏幕上的任何一点,我的随机范围应该是多少?

【问题讨论】:

  • 这是 2D 还是 3D 游戏?另外,由于newSprite 附加了一个新加载的精灵,SR 是用来做什么的?您想定位SRnewSprite?请回答每个问题以获得我的答案
  • @Programmer 是2D游戏,我想定位游戏对象,将精灵定位在Sprite.create上也会影响游戏对象的位置所以没关系吧?
  • 但是你想定位哪个游戏对象? newSpriteSR。对我来说,您似乎想定位newSprite。我不知道SR 是什么或用于什么,所以我无法回答。我会为newSprite 提供解决方案,但您可以随时更改。
  • @Programmer SR只是将精灵附加到游戏对象newSprite,不是吗? ..我想定位newSprite..

标签: c# unity3d


【解决方案1】:

您必须使用Camera.main.ViewportToWorldPointview 转换为 world 点,然后您才能使用 01.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));

【讨论】:

  • 谢谢,太好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多