Я использую ZDK от Zigfu для Game Project в своем кабинете. Я взял стандартный аватар и привязал к себе два коллайдера (сферические коллайдеры с жестким телом). Один для левой руки, а другой для правой руки. Я строю несколько (24) полевых коллайдеров вокруг аватара, чтобы отслеживать, входят ли руки в новую область. Каждая коробка имеет «идентификатор» от 0 до 23 следующий сценарий:C# OnTriggerEnter NullReferenceException
using UnityEngine;
using System.Collections;
public class handsTracking : MonoBehaviour
{
public int id;
void OnTriggerEnter (Collider other) {
if(other.tag == "handsLeftTracking"){
print("leftHand entered: " + id);
playerCommunication.activity += 0.1f;
playerCommunication.handsLeft[id] = true; //here ist the exception
}
else if (other.tag == "handsRightTracking"){
print("rightHand entered: " + id);
playerCommunication.activity += 0.1f;
playerCommunication.handsRight[id] = true; //here ist the exception
}
}
void OnTriggerExit (Collider other) {
if(other.tag == "handsLeftTracking"){
print("leftHand exited: " + id);
playerCommunication.activity += 0.01f;
playerCommunication.handsLeft[id] = false; //here ist the exception
}
else if (other.tag == "handsRightTracking"){
print("rightHand exited: " + id);
playerCommunication.activity += 0.01f;
playerCommunication.handsRight[id] = false; //here ist the exception
}
}
}
В другом сценарии на плеере я хочу использовать эти столкновения. В handsTracking.cs следует изменять только значения в сценарии playerCommunication.cs:
using UnityEngine;
using System.Collections;
public class playerCommunication : MonoBehaviour {
public static bool[] handsRight;
public static bool[] handsLeft;
public static float activity;
public float fallback;
// Use this for initialization
void Awake() {
activity = 0.0f;
}
// Update is called once per frame
void Update() {
if((activity - fallback * Time.deltaTime) >= 0.0f){
activity -= fallback * Time.deltaTime;
}
}
void OnGUI() {
GUI.Box (new Rect (10,200,150,20), "Activity: " + activity);
}
}
Это прекрасно работает, до сих пор. Но я получаю следующие исключения:
NullReferenceException: Object reference not set to an instance of an object
handsTracking.OnTriggerEnter (UnityEngine.Collider other) (at Assets/SeriousGame/Scripts/handsTracking.cs:19)
Если предаю из строк, в которых я пытался отредактировать массив, ошибки исчезли. Я попытался вызвать функцию в скрипте playerCommunication или обработать массивы в файле handsTracking.cs, но ничего не работает. Я не понимаю связь между столкновением и массивом ?!
В строке 19, где произошла ваша ошибка, я вижу '}'. Я сбрасываю сверху, поэтому я не вижу простыни. На какой строке происходит ошибка? – Joetjah
Ах, извините, я немного экспериментировал с кодом, поэтому ошибка здесь не соответствует коду. Я начал его снова, и это все еще строки с 'playerCommunication.handsLeft [id] = true ;, ... Здесь он выдает исключение ... – dome12b