2015-03-03 1 views
0

Я создал сценарий, который использует RayCasting для обнаружения двух Prefabs - One prefab имеет тег под названием «target», а второй prefab имеет тег под названием «unTarget». При нажатии на prefab 1 с тегом «Target» его предполагается увеличить счетчик и при нажатии на prefab 2 с тегом «unTarget» его предполагается уменьшить счетчик. Кажется, что это работает, когда на сцене присутствует только один Prefab. Он будет увеличиваться/уменьшаться, когда добавляется только один. Когда оба prefabs находятся в Сцене, оба сборника будут увеличиваться. Я не знаю, почему это происходит. Любая помощь или идеи? Извините, если мой код немного грязный.Unity - Raycast не работает, когда несколько сцен на сцену

using UnityEngine; 
using System.Collections; 

public class clicks : MonoBehaviour 
{ 

    public int score; 

    void Start() 
    { 
     score = 0; 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     if (Input.GetMouseButtonDown (0)) 
     { 

      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
      RaycastHit hit; 

      if (Physics.Raycast(ray, out hit,200)) 
      { 
       if (GameObject.FindGameObjectWithTag ("target")) 
       { 
        score++; 
       } 
       else 
       { 
        score--; 
       } 
      } 
     } 
} 
+0

Кроме того, намного проще реализовать IPointerClickHandler, чем вручную использовать raycasting. –

ответ

2

Метод GameObject.FindGameObjectWithTag будет смотреть на всю вашу сцену для объекта с target в качестве тега. Так как у вас есть одна в сцене, которая всегда будет возвращать true, если вы что-то ударили.

Вам нужно посмотреть свойства RaycastHit и вытащить тег оттуда.

if (hit.collider.tag == "target") 
{ 
    score++; 
} 
else 
{ 
    score--; 
} 
+0

Вы уверены, что это не hit.collider.name == "target"? Хит просто возвращает луч, не так ли? –

+0

Документы Unity заблокированы на моем рабочем месте. Я уверен в статическом вызове GameObject, но не столько о выводе данных из rayhit. у коллайдера есть ссылка на его игровой объект 'hit.collider.gameObject.Tag', может быть? –

+0

Телефон на помощь. Последующие документы и добавили правильный путь через свойства, прикрепленные к возвращаемому значению –