2016-12-29 102 views
2

好吧,這裏是我的代碼。這應該非常簡單,但由於某種原因,它不想與我一起工作。 Raycast從鼠標發出一束光線,如果它碰到帶有標籤的物體,它會將一個數字賦給一個變量。如果它沒有碰到一個對象,那麼它將該變量設置爲-99。出於某種原因,我的是掛在:其他聲明不起作用?

答:我不打的對象,它輸出-99第一次,但之後它掛在得到分配4.

BI打的對象,它會工作很好。當我點擊關閉對象時,它掛在我之前剛剛打過的對象的變量上。

em.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class GameFunctions : MonoBehaviour { 

int Hitnum = -99; 
void Start() { 
    } 

    void Update() { 

     if (Input.GetMouseButtonDown (0)) { 
      objectCheck(); 
     } 

    } 
    //end of UPDATE function 



public void objectCheck() { 
     RaycastHit hit; 
     Ray ray = camera.ScreenPointToRay (Input.mousePosition); 
     if (Physics.Raycast (ray, out hit, 10000.0f)) { 
      if (hit.collider.tag == "Box") { 
       Hitnum = 1; 
      } else if (hit.collider.tag == "Sphere") { 
       Hitnum = 2; 
      } else if (hit.collider.tag == "Pyramid") { 
       Hitnum = 3; 
      } else if (hit.collider.tag == "Trapezoid") { 
       Hitnum = 4; 
      } else { 
       Hitnum = -99; 
      } 
     } 
     Debug.Log (Hitnum); 
    } 
    //end of check 

} 

在此先感謝。這讓我很煩,因爲它應該很簡單。

編輯:這次發佈完整的代碼,是的所有。我應該提到,沒有其他具有標籤的對象,它只是空的空間。這應該是一個非常基本的兒童形狀標識符。

編輯:編輯:我希望它把-99,如果你不擊中的對象。後來我可能會對數字做些什麼,但現在我開始需要解決這個問題。

+0

你能發表完整的代碼嗎? –

+0

你應該編輯你的問題,說明你期望發生什麼,然後陳述當前正在發生的事情。你沒有這樣做,這實際上很難回答。在目前的問題中,沒有人能夠說出你的期望。另外,請告訴我們正在調用哪個函數。 – Programmer

+0

1.你可以在第一個物體(物理物體...)中放置另一個物體,並給Hitnum一定的值以檢查它是否卡住它。 2.要知道一個變量是否被覆蓋,或者只是簡單地保持原來的值,你可以增加變量而不是覆蓋變量,這樣你就可以知道它被卡住的位置。3.因爲否則如果不太好讀,怎麼改變它到switch case語句? – Kev1n91

回答

1

重新統一,現在一切正常。謝謝。查看我的設置,看看發生了什麼變化。我之前刪除了背景上有背景標籤的背景。我猜團結會決定,如果沒有光線投射,它會得到最後擊中的物體?

+1

會發生什麼,如果Raycast沒有擊中任何東西,它不會輸入第一個if語句if(Physics.Raycast(ray,out hit,10000.0f)),它將返回false並且Hitnum將保留舊值。所以你還需要一個else語句後第一個if語句 –

+1

嘗試做一個開關(myString){case「Sphere」:... case「Pyramid」:.. case null:...},比elseif結構更好代碼友好 –