Unity找不到其他GameObject的脚本
本文关键字:脚本 GameObject 其他 找不到 Unity | 更新日期: 2023-09-27 18:21:26
我从另一个GameObject的脚本中获取变量时遇到问题。。我以前使用过这种类型的引用,我知道它是如何工作的,但出于某种原因,它说它找不到我引用的脚本。
引用其他代码的代码(如果CanHearPlayer()开头的语句):
using UnityEngine;
using System.Collections;
public class EnemySight : MonoBehaviour {
public GameObject Player;
public float fieldOfViewDegrees = 30;
public float visibilityDistance = 50;
public bool SeeingPlayer;
public float deathDistance;
public float hearDistance;
void Update(){
SeeingPlayer = CanSeePlayer();
float Distance = Vector3.Distance(transform.position, Player.transform.position);
if ((SeeingPlayer == true)) {
transform.LookAt(Player.transform.position);
if (Distance < deathDistance){
Debug.Log("You died");
//Game over sequence starts here
}
}
if (CanHearPlayer () == true) {
Debug.Log ("I can hear you.");
}
}
protected bool CanSeePlayer()
{
RaycastHit hit;
Vector3 rayDirection = Player.transform.position - transform.position;
if ((Vector3.Angle(rayDirection, transform.forward)) <= fieldOfViewDegrees * 0.5f)
{
// Detect if player is within the field of view
if (Physics.Raycast(transform.position, rayDirection, out hit, visibilityDistance))
{
return (hit.transform.CompareTag("Player"));
}
}
return false;
}
protected bool CanHearPlayer(){
RaycastHit hit;
Vector3 rayDirection = Player.transform.position - transform.position;
if (Player.GetComponent<FirstPersonController>().MakingWalkingSound == true) {
hearDistance = 50;
} else {
hearDistance = 5;
}
if (Player.GetComponent<FirstPersonController>().MakingRunningSound == true) {
hearDistance = 100;
}
if (Physics.Raycast(transform.position, rayDirection, out hit, hearDistance))
{
return (hit.transform.CompareTag("Player"));
}
return false;
}
}
公共游戏对象"玩家"在Unity中被定义为包含"FirstPersonController"脚本作为组件的对象。
它所指的代码(部分代码):
public class FirstPersonController : MonoBehaviour
{
public bool MakingWalkingSound;
public bool MakingRunningSound;
private void GetInput(out float speed)
{
// Read input
float horizontal = CrossPlatformInputManager.GetAxis("Horizontal");
float vertical = CrossPlatformInputManager.GetAxis("Vertical");
MakingWalkingSound = !(horizontal == 0 && vertical == 0);
MakingRunningSound = Input.GetKey(KeyCode.LeftShift);
}
错误为:Assets/EnemySight.cs(53,41):error CS0246:找不到类型或命名空间名称"FirstPersonController"。是否缺少using指令或程序集引用?And:Assets/EnemySight.cs(59,41):error CS0246:找不到类型或命名空间名称"FirstPersonController"。是否缺少using指令或程序集引用?
这些行对应于CanHearPlayer中的前两个if语句。
我做错了什么?我在谷歌和StackOverflow上搜索过,但找不到问题出在哪里。
谢谢!
如果您的FirstPersonController类上有一些命名空间声明,您需要在EnemySight代码中使用声明。就像:
namespace MyNamespace.Blah {
public class FirstPersonController : MonoBehaviour {
...
}
}
而且。。。
using MyNamespace.Blah;
public class EnemySight : MonoBehaviour {
...
}
对于monodedevelop,当声明不在using作用域中的类时,可以使用alt+spacebar,它会将using放在类的顶部。