2012-05-13 95 views
1

兩個對象,我想同樣的腳本關聯到不同的空對象我一樣在遊戲中的佔位符使用。其目的是利用它們的位置,以便當用戶觸摸屏幕中的某個點時,靠近其中一個對象,會出現一個專門的GUI。問題是,雖然兩個對象不同,但它們的腳本似乎互相影響,所以當遊戲運行時,碰到這兩個對象中的任何一個都會出現。我究竟做錯了什麼?Unity3D:用相同的腳本

.... 
private var check: boolean; 
var topCamera : Camera; 
var customSkin : GUISkin; 

function Update() { 
    if (Input.GetMouseButtonDown(0)){ 
     if(Input.mousePosition.x > this.transform.position.x - Screen.width*0.20 && Input.mousePosition.x < this.transform.position.x + Screen.width*20){ 
     if(Input.mousePosition.y > this.transform.position.y - Screen.height*0.2 && Input.mousePosition.y < this.transform.position.y + Screen.height*0.2){ 
       check = true; 
     } 
    } 
} 

if(check){ 
    //the camera zooms forward 
}else{ 
    //the camera zooms backward 
} 
} 

function OnGUI() { 
if (this.check){ 
var w = Screen.width; 
var h = Screen.height; 
var bw = 0.083; 
var bws = 0.001 *w; 
GUI.skin = customSkin; 
GUI.Box(new Rect(w*0.6,h*0.3,w*0.38,h*0.45), "Stuff"); 
customSkin.box.fontSize = 0.04*h; 
customSkin.textField.fontSize = 0.08*h; 
customSkin.button.fontSize = 0.04*h; 
textFieldString = GUI.TextField (Rect (w*0.62, h*0.39, w*0.34, h*0.1), textFieldString);  
if (GUI.Button (Rect (w*0.62,h*0.50, w*bw, h*0.1), "+")) { 
    if (this.check){ 
     this.check=false; 

    }else{ 
     this.check = true; 
    } 
//... 
} 
//... 
    } 
+0

Unity標籤用於Microsoft Unity。唐的濫用。 –

回答

2

這可能是不工作的,因爲你在你的Update()功能與桔子比較蘋果。 Input.mousePosition返回2D中的位置像素座標和transform.position返回3D中的GameObject位置世界座標。

要檢查您是否點擊了一個對象,您需要將Collider附加到相應的遊戲對象,並在您的腳本中使用Raycast進行碰撞測試。下面是在JavaScript文件的初步認識例如:

var ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
if (Physics.Raycast (ray, 100)) { 
    print ("Hit something"); 
} 

這個方法的很酷的事情是,我們正在檢查對撞機和射線之間的碰撞。如果你只想看看你是否在GameObject附近單擊,只需讓Collider大於GameObject即可。不需要搞亂不平等!

+0

這似乎很有趣謝謝。我一回到家就會嘗試 –

+0

這正是我所期待的。謝謝! –

0

如果你的目標是點擊某處接近對象並不僅的對象,那麼你有一些配置,其中有空間(空間這些對象的位置)是足夠接近爲了它們的GUI出現在兩個對象上,因此你需要一些腳本來決定哪一個更接近。

我建議你實現一個monobehaviour that is a singleton將跟蹤這些點擊並衡量所有物體的距離,以獲得最接近的一次。

再次閱讀您的文章,我想你想要獲得圖形用戶界面只需點擊對象,當你這樣做,你得到兩個圖形用戶界面。我認爲這是因爲錯誤的計算使得checktrue

你能提供更多細節嗎?是否有一些空間在點擊時不應該有GUI消息,或者一切都由這些對象填充了?

+0

我已驗證對象,並且觸摸位於兩個不同的座標系中。例如,雖然我觸摸了物體的對象((0.77,0.46)),而觸摸(12.1,95.2),我想用像素來衡量。如何將一個轉換成另一個? –