2015-06-20 2 views
0

Я использую этот код, но, к сожалению, я получаю эту ошибку:Получение GameObject от RaycastHit

CS1061: Type UnityEngine.RaycastHit' does not contain a definition for gameObject' and no extension method gameObject' of type UnityEngine.RaycastHit' could be found (are you missing a using directive or an assembly reference?

public float Selected; 
public GameObject[] handler; 
public float[] prices; 
public GameObject Tile; 
private Money mon; 
// Use this for initialization 
void Start() { 
    mon = GameObject.Find ("Gamelogic").GetComponent<Money>(); 
} 

// Update is called once per frame 
void Update() { 
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
    RaycastHit hit; 
    if(Physics.Raycast (ray,out hit, 20)) 
    { 
     if(hit.transform.tag == "tiles") 
     { 
      Tile = hit.gameObject; 
     } 
     else 
     { 
      Tile = null; 
     } 

    } 
    if(Input.GetMouseButtonDown(0) && Tile != null) 
    { 

    } 
    } 
} 
+1

Сообщение об ошибке ясно: в строке 'Tile = hit.gameObject' тип объекта' hit' ('RaycastHit') не содержат поля, свойства или метода с именем 'gameObject'. Пожалуйста, проверьте документацию, чтобы просмотреть доступных публичных членов класса. – Mephy

+0

Я проверил его, но я ничего не могу найти по этому поводу. – Frank6

+0

Я думаю, вам нужно 'hit.transform.gameObject' вместо' hit.gameObject'. – FalconUA

ответ

2

Heres функция, которую я использую, вы должны быть в состоянии адаптировать его легко.

GameObject GetClickedGameObject() 
{ 
    // Builds a ray from camera point of view to the mouse position 
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
    RaycastHit hit; 
    // Casts the ray and get the first game object hit 
    if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask)) 
    { 

     Instantiate (clickMarker,hit.point,Quaternion.identity); //places clickMarker at hit.point. This isn't needed, just there for visualisation. 
     return hit.transform.gameObject; 
    } 
    else 
     return null; 
} 

Я думаю, что ваша основная проблема заключается в том, что

Tile = hit.gameObject; 

должен быть

Tile = hit.transform.gameObject; 

также:

if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask)) 

Обратите внимание на этот способ сделать это, это имеет встроенную маску слоя, поэтому вам не нужно (hit.transform.tag == "Плитки")

Смежные вопросы