Raycast无法找到带标签的游戏​​对象

时间:2015-11-17 02:56:57

标签: unity3d

我的Raycast围绕播放器旋转并扫描2D区域。它应该识别另一个Gameobject,标记为Pick Up,但found始终为假。

using UnityEngine;
using System.Collections;

public class Findway : MonoBehaviour {

    public GameObject Player;
    // Use this for initialization
    void Start () {
        transform.position = Player.transform.position;
    }

    RaycastHit hit;
    float[] distance = new float[360];
    int moveAngle = 0;
    bool found = false;

    // Update is called once per frame
    void Update () {
        transform.position = Player.transform.position;

        for (int iii = 0; iii < 360; iii++) 
        {
            Vector3 rayway = new Vector3 (Mathf.Cos(180 * iii / Mathf.PI), 0, Mathf.Sin(180 * iii / Mathf.PI));
            if (Physics.Raycast (transform.position, rayway, out hit, 100f))
            {
                distance [iii] = hit.distance;
                //Debug.Log(hit.collider.gameObject);
                //Debug.DrawRay(transform.position, transform.forward, Color.green);
                if (hit.collider.CompareTag ("Pick Up"))
                {
                    moveAngle = iii;
                    found = true;
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

使用你的光线投射for for循环,一个好的cpu不会花费很长时间来运行迭代直到360并在更新中使用它会导致它无限次运行导致更多问题,总是使用分而治之,最小化代码,删除所有内容,然后运行光线检查它是否正常工作,然后应用旋转,确定它是否有效.Double检查是否有标记为“拾取”的对象。

,也不要在没有明确条件的情况下在更新中使用for循环来停止它,就像bool一样