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!
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
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
Kısaltıldığın zaman, her iki dosyada bir ad alanı yönergesi atladın mı? – peterept