Zigfu の ZDK for Game Project を研究に使用しています。標準のアバターを手に取り、2 つのコライダー (剛体を持つ球体コライダー) を手に取り付けました。1つは左手用、もう1つは右手用です。手が新しい領域に入っているかどうかを追跡するために、アバターの周りにいくつか (24 個) のボックス コライダーを作成します。すべてのボックスには、0 から 23 までの「id」と次のスクリプトがあります。
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 で配列を処理しようとしましたが、何も機能しません。衝突と配列の間のリンクがわかりません?!