我的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;
}
}
}
}
}
答案 0 :(得分:3)
使用你的光线投射for for循环,一个好的cpu不会花费很长时间来运行迭代直到360并在更新中使用它会导致它无限次运行导致更多问题,总是使用分而治之,最小化代码,删除所有内容,然后运行光线检查它是否正常工作,然后应用旋转,确定它是否有效.Double检查是否有标记为“拾取”的对象。
,也不要在没有明确条件的情况下在更新中使用for循环来停止它,就像bool一样