【问题标题】:Unity - Raycast not working when more than one prefab on SceneUnity - 当场景中有多个预制件时,Raycast 不起作用
【发布时间】:2015-03-04 00:38:37
【问题描述】:

我创建了一个脚本,它使用 RayCasting 来检测两个 Prefab - 一个 prefab 有一个名为“target”的标签,第二个 prefab 有一个名为“unTarget”的标签。单击带有“Target”标签的预制件1时,它应该增加计数,而当点击带有“unTarget”标签的预制件2时,它应该减少计数。当场景中只有一个 Prefab 时,这似乎有效。当仅添加并单击一个时,它将递增/递减。当两个预制件都在场景中时,两个预制件都会增加。我不确定为什么会这样。任何帮助或想法?对不起,如果我的代码有点乱。

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--;
                }
            }
      }
}   

【问题讨论】:

  • 另外,只实现 IPointerClickHandler 比手动进行光线投射要容易得多。

标签: c# unity3d monodevelop


【解决方案1】:

GameObject.FindGameObjectWithTag 方法将在整个场景中查找带有target 作为标签的对象。因为你在场景中有一个总是返回真,如果你撞到了什么。

您需要查看 RaycastHit 上的属性并从那里拉出标签。

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

【讨论】:

  • 确定不是hit.collider.name == "target"?命中只是返回射线不是吗?
  • Unity 文档在我的工作场所被阻止。我对 GameObject 静态调用很有信心,但对从 rayhit 中提取数据并没有太多信心。 collider 是否有对其游戏对象 hit.collider.gameObject.Tag 的引用?
  • 电话救援。遵循文档并通过附加到返回值的属性添加正确的路径
猜你喜欢
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多