2016-06-13 186 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