2015-11-11 16 views
5

Başka bir GameObject dosyasındaki betikten bir değişken almakta sorun yaşıyorum .. Daha önce bu tür bir yönlendirmeyi kullandım ve nasıl çalıştığını biliyorum, ancak bir nedenden dolayı bulamadığını söylüyor atıfta bulunuyorum.Birlik diğer GameObject betiğini bulamıyor

(CanHearPlayer başlangıcında() de tablolara varsa) diğer kod atıfta kod :

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; 
} 

}

halka GameObject 'Oyuncu nesne olarak Unity tanımlanır 'FirstPersonController' komut dosyasını bir bileşen olarak içerir. o (bir parçasının) bahsediyor

Kodu:

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); 
} 

hataları okuyun: Varlıklar/EnemySight.cs (53,41): hata CS0246: tür veya ad alanı adı 'FirstPersonController' yapamadı bulunan. Bir yönerge veya montaj referansı eksik misiniz? Ve: Varlıklar/EnemySight.cs (59,41): error CS0246: 'FirstPersonController' türü veya ad alanı adı bulunamadı. Bir yönerge veya montaj referansı eksik misiniz?

Bu satırlar, CanHearPlayer'daki ilk iki if ifadesine karşılık gelir.

Neyi yanlış yapıyorum? Google ve StackOverflow'da arama yaptım, ancak sorunun ne olduğunu bulamıyorum.

Teşekkürler!

+0

EnemySight.cs içinde çok fazla satır olmadığında 53 ve 59 numaralı satırlardaki hatayı bildirmesi garip. Doğru dosyaya yapıştırdığınızdan emin misiniz? FirstPersonController kendi dosyasında mı - olmalıdır. – peterept

+0

Cevabınız için teşekkür ederiz! EnemySight biraz da kısaldı, bundan bahsetmedim. Ama dediğim gibi, hatalar CanHearPlayer'daki if ifadeleriyle ilgilidir. – Timmeh

+0

Kısaltıldığın zaman, her iki dosyada bir ad alanı yönergesi atladın mı? – peterept

cevap

3

Eğer FirstPersonController sınıfınızda bir isim alanı bildirimi varsa, EnemySight kodunuzu kullanarak bildirmeniz gerekir. Tıpkı:

namespace MyNamespace.Blah { 
    public class FirstPersonController : MonoBehaviour { 
     ... 
    } 
} 

ve ... senin kullanarak kapsamında yer almayan tüm sınıfları ilan ve sınıfın üstündeki kullanarak yerleştirecektir zaman alt + boşluk kullanabilirsiniz MonoDevelop için

using MyNamespace.Blah; 

public class EnemySight : MonoBehaviour { 
    ... 
} 

senin için.

İlgili konular