0
using UnityEngine;
using System.Collections;
public class GuardSample : MonoBehaviour 
{
FOV2DEyes eyes;
FOV2DVisionCone visionCone;
float speed = -5;
RaycastHit hit;


void Start() 
{
    eyes = GetComponentInChildren<FOV2DEyes>();
    visionCone = GetComponentInChildren<FOV2DVisionCone>();
}

void FixedUpdate()
{
    if (transform.position.x < -10 || transform.position.x > 10)
    {
        speed *= -1;
    }

    transform.position = new Vector3(transform.position.x + speed * Time.fixedDeltaTime, transform.position.y, transform.position.z);
}

bool playerInView = false;

void Update()
{
    playerInView = false;
    foreach (RaycastHit hit in eyes.hits)
    {
        if (hit.transform && hit.transform.tag == "Player")
        {
            playerInView = true;
        }
    }

}

void OnGUI()
{
    if (playerInView)
    {
        GUI.Box (new Rect (10, 10, 160, 60), "Title");
        GUI.Label( new Rect(10, 10, 160, 60), hit.collider.gameObject.name);
    }

}

}

我的 gaurd 移动,当玩家进入 raycast 时,GUI 出现但名称无法识别

除“hit.collider.gameObject.name”外,一切正常 Unity 给出“对象引用未设置为对象实例”的错误

请看看我是 Unity 和 C# 的新手

4

1 回答 1

2

问题是您无权访问命中变量,因为您没有存储它,您只是在每次迭代中保存它。一个简单的解决方案是存储使playerInView = true;.

像这样对 Update() 和 OnGUI() 方法的修改必须有效;

RaycastHit hittenGo; // Declare up this variable

void Update()
{
  playerInView = false;
  foreach (RaycastHit hit in eyes.hits)
  {
    if (hit.transform && hit.transform.tag == "Player")
    {
        hittenGo = hit;
        playerInView = true;
    }
  }
}

void OnGUI()
{
  if (playerInView)
  {
    GUI.Box (new Rect (10, 10, 160, 60), "Title");
    GUI.Label( new Rect(10, 10, 160, 60), hittenGo.collider.gameObject.name);
  }
}

不要介意问我你对我的方法有任何疑问。

于 2015-01-20T17:14:46.410 回答