私はunity3dの問題に直面しています。シンプルなキューブであるgameobjectがあり、 というコンポーネントが付いています。これは、赤色のMaterial
というコンポーネントです。また、この キューブに添付されているマウスの左クリックでイベントを実行するスクリプトがあります。つまり、材料の色が緑色に変わります。スクリプト はうまく動作しますが、シーン内で欲しいものはcanvas
gameobject
です。これはデフォルトでは無効です。 材料色が緑色の場合はこのゲームオブジェクトをアクティブにし、色が赤色の場合は無効化します。 私は
GameObject.Find("Canvas")
と呼ばれる機能を使用していますが、エラーが発生しています。また、私はこの関数を呼び出すことによってこのキャンバスでタグを使用してこの問題を解決しようとしますGameObject.FindWithTag("Canvas")
しかし、何も動作しません。同じエラーが来ています。マウスクリックでゲームオブジェクトがアクティブにならない
NullReferenceException: Object reference not set to an instance of an object
コード:ゲームオブジェクトが無効になっているとき
public class Cube : MonoBehaviour {
[SerializeField] private bool check;
void OnMouseDown() {
if (!check) {
gameObject.GetComponent<Renderer>().material.color = Color.green;
GameObject.Find("Canvas").SetActive(true);
check = true;
} else if (check) {
gameObject.GetComponent<Renderer>().material.color = Color.red;
check = false;
}
}
}
ok私は理解しています!私はゲームオブジェクトの子供だけを非アクティブにすることができます。 – hamel123
ゲームオブジェクトを無効にすることはできますが、GameObject.FindWithTagは非表示のオブジェクトまたは親が非表示のオブジェクトでは機能しません。あなたがアクティブなときにオブジェクトの参照を取得する必要がありますか、または私はそれに参照をドラッグして私の答えで行ったようにそれを行う必要があります。 – Programmer