2016-06-13 72 views
1

在运行时创建雪碧我想在随机位置在屏幕产卵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; 

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

+0

这是2D游戏还是3D游戏?另外,由于'newSprite'有一个新加载的sprite,所以'SR'用于什么?你想定位'SR'或'newSprite'?请回答每个问题以获得我的回答 – Programmer

+0

@Programmer这是一款2D游戏,我想定位游戏对象,将Sprite放置在Sprite.create上也会影响游戏对象的位置,所以不要紧它? – DAVIDBALAS1

+0

但是你想要定位哪个GameObject? 'newSprite'或'SR'。对我来说,它看起来像你想定位'newSprite'。我不知道'SR'是什么或用于什么,所以我不能回答这个问题。我将为'newSprite'提供解决方案,但您随时可以更改它。 – Programmer

回答

1

你要转换视图世界点与那么你可以使用到与0.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)); 
+1

谢谢,太棒了。 – DAVIDBALAS1