他のGameObjectからスクリプトから変数を取得する際に問題があります。このタイプの参照を使用していますが、どのように動作するのか知っていますが、私が参照しているスクリプト。Unityは他の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;
}
}
公衆ゲームオブジェクト「プレーヤー」が対象とユニティに定義されています'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);
}
エラーが読み:資産/ EnemySight.cs(53,41):エラーCS0246:型または名前空間名 'FirstPersonController' ことができませんでした見つけられた。 usingディレクティブまたはアセンブリ参照がありませんか? Asset/EnemySight.cs(59,41):エラーCS0246:型または名前空間の名前 'FirstPersonController'が見つかりませんでした。 usingディレクティブまたはアセンブリ参照がありませんか?
これらの行は、CanHearPlayerの最初の2つのif文に対応しています。
私は間違っていますか?私はGoogleとStackOverflowで検索しましたが、問題が何であるかはわかりません。
ありがとう!
EnemySight.csに多数の行がない場合、53行目と59行目のエラーを報告するのは奇妙です。正しいファイルを貼り付けてもよろしいですか? FirstPersonControllerはそれ自身のファイルです - そうすべきです。 – peterept
ありがとうございました! EnemySightもやや短くなっていますが、私は言及しませんでした。しかし、私が言ったように、エラーはCanHearPlayerのif文を参照しています。 – Timmeh
あなたが短縮されたと言うと、どちらのファイルでも名前空間ディレクティブを省略しましたか? – peterept