Mam problem ze znalezieniem zmiennej ze skryptu z innego GameObject. Używałem tego typu referowania wcześniej i wiem jak to działa, ale z jakiegoś powodu mówi, że nie może znaleźć skrypt, do którego się odnawiam.Unity nie może znaleźć skryptu innego GameObject
Kod, który odnosi się do innego kodu (jeśli sprawozdania na początku 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;
}
}
GameObject publicznego „Gracz” jest zdefiniowane w Jedności jako przedmiot który zawiera skrypt "FirstPersonController" jako składnik.
Code to odnosi się do części (IT):
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);
}
Błędy odczytu: aktywa/EnemySight.cs (53,41): error CS0246: Typ lub obszaru nazw 'FirstPersonController' nie mógł być znalezionym. Brakuje dyrektywy użycia lub odwołania do zespołu? I: Assets/EnemySight.cs (59,41): error CS0246: Nie można znaleźć nazwy typu ani nazwy przestrzeni "FirstPersonController". Brakuje dyrektywy użycia lub odwołania do zespołu?
Te linie odpowiadają pierwszym dwóm instrukcjom if w CanHearPlayer.
Co robię źle? Szukałem w Google i StackOverflow, ale nie mogę znaleźć problemu.
Dzięki!
To dziwne, że zgłasza błąd w liniach 53 i 59, gdy w EnemySight.cs nie ma zbyt wielu linii. Czy na pewno wkleiłeś właściwy plik? Jest FirstPersonController w swoim własnym pliku - powinno być. – peterept
Dziękuję za odpowiedź! EnemySight też się skraca, nie wspomniałem o tym. Ale tak jak powiedziałem, błędy odnoszą się do instrukcji if w CanHearPlayer. – Timmeh
Kiedy mówisz "skrócone", czy w jakimś pliku pominięto dyrektywę dotyczącą przestrzeni nazw? – peterept