2015-11-11 17 views
5

他の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で検索しましたが、問題が何であるかはわかりません。

ありがとう!

+0

EnemySight.csに多数の行がない場合、53行目と59行目のエラーを報告するのは奇妙です。正しいファイルを貼り付けてもよろしいですか? FirstPersonControllerはそれ自身のファイルです - そうすべきです。 – peterept

+0

ありがとうございました! EnemySightもやや短くなっていますが、私は言及しませんでした。しかし、私が言ったように、エラーはCanHearPlayerのif文を参照しています。 – Timmeh

+0

あなたが短縮されたと言うと、どちらのファイルでも名前空間ディレクティブを省略しましたか? – peterept

答えて

3

FirstPersonControllerクラスにいくつかの名前空間宣言がある場合は、EnemySightコードでusingを宣言する必要があります。同じように:

MonoDevelopのため
namespace MyNamespace.Blah { 
    public class FirstPersonController : MonoBehaviour { 
     ... 
    } 
} 

と...

using MyNamespace.Blah; 

public class EnemySight : MonoBehaviour { 
    ... 
} 

あなたの使用してスコープにまだ入っていないクラスを宣言するときには、ALT +スペースバーを使用することができ、それはクラスの上に使用して配置されますあなたのために。

関連する問題