using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// ゲーム実行中にコンポーネントの追加/削除のテスト用クラス /// ここではCubeオブジェクトにだけRigidBodyコンポーネントを後から追加したり、削除したり、プロパティを操作するクラス /// </summary> public class AddComponentTest : MonoBehaviour { [Header("Planeかどうかの判定用 trueならPlane")] public bool isPlaneFlag; private bool isRigidGet; // 指定した条件(ここではRigidBodyコンポーネントを持っている)かどうかを判定するフラグ void Start() { } void Update() { // ボタンを押したとき if (Input.GetKeyDown(KeyCode.G)) { // isPlaneFlagがfalseであり、かつisRigidGetがfalseである場合 if (!isPlaneFlag && !isRigidGet) { // isPlaneFlag == false && isRigidGet == false と同義 // このゲームオブジェクトに新しくRigidBodyコンポーネントを追加する gameObject.AddComponent<Rigidbody>(); // RigidBodyを持っているかどうかのフラグをオンにし、持っている状態にする isRigidGet = true; Debug.Log(isRigidGet); } } } }
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// ゲーム実行中にコンポーネントの追加/削除のテスト用クラス /// ここではCubeオブジェクトにだけRigidBodyコンポーネントを後から追加したり、削除したり、プロパティを操作するクラス /// </summary> public class AddComponentTest : MonoBehaviour { [Header("Planeかどうかの判定用 trueならPlane")] public bool isPlaneFlag; private bool isRigidGet; // 指定した条件(ここではRigidBodyコンポーネントを持っている)かどうかを判定するフラグ void Start() { } void Update() { // ボタンを押したとき if (Input.GetKeyDown(KeyCode.G)) { // isPlaneFlagがfalseであり、かつisRigidGetがfalseである場合 if (!isPlaneFlag && !isRigidGet) { // isPlaneFlag == false && isRigidGet == false // このゲームオブジェクトに新しくRigidBodyコンポーネントを追加する gameObject.AddComponent<Rigidbody>(); // RigidBodyを持っているかどうかのフラグをオンにし、持っている状態にする isRigidGet = true; Debug.Log(isRigidGet); } ////* ここから処理を追加します *//// // isRigidGet == true なら if (isRigidGet) { // すでにRigidBodyを追加している状態である場合 // RigidBody型の変数rbを宣言し、RigidBodyを取得してアクセスできるようにする Rigidbody rb = GetComponent<Rigidbody>(); // RigidBodyコンポーネントの持つIsKinematicプロパティの状態を見て、オン・オフを切り替える if (!rb.isKinematic) { rb.isKinematic = true; } else { rb.isKinematic = false; } } } ////* ここまで *//// } }
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// ゲーム実行中にコンポーネントの追加/削除のテスト用クラス /// ここではCubeオブジェクトにだけRigidBodyコンポーネントを後から追加したり、削除したり、プロパティを操作するクラス /// </summary> public class AddComponentTest : MonoBehaviour { [Header("Planeかどうかの判定用 trueならPlane")] public bool isPlaneFlag; private bool isRigidGet; // 指定した条件(ここではRigidBodyコンポーネントを持っている)かどうかを判定するフラグ void Start() { } void Update() { // ボタンを押したとき if (Input.GetKeyDown(KeyCode.G)) { // isPlaneFlagがfalseであり、かつisRigidGetがfalseである場合 if (!isPlaneFlag && !isRigidGet) { // isPlaneFlag == false && isRigidGet == false // このゲームオブジェクトに新しくRigidBodyコンポーネントを追加する gameObject.AddComponent<Rigidbody>(); // RigidBodyを持っているかどうかのフラグをオンにし、持っている状態にする isRigidGet = true; Debug.Log(isRigidGet); } // isRigidGet == true なら if (isRigidGet) { // すでにRigidBodyを追加している状態である場合 // RigidBody型の変数rbを宣言し、RigidBodyを取得してアクセスできるようにする Rigidbody rb = GetComponent<Rigidbody>(); // RigidBodyコンポーネントの持つIsKinematicプロパティの状態を見て、オン・オフを切り替える if (!rb.isKinematic) { rb.isKinematic = true; } else { rb.isKinematic = false; } } } ////* ここから処理を追加します *//// // ボタンを押したとき if (Input.GetKeyDown(KeyCode.H)) { // isRigidGetがtrueなら = RigidBodyコンポーネントを持っているなら if (isRigidGet) { // RigidBodyコンポーネントを削除する Destroy(GetComponent<Rigidbody>()); // 所有フラグをfalseにし、RigidBodyコンポーネント持っていない状態にする isRigidGet = false; // 落下しているCubeの位置を初期位置に戻す float pos = 3.0f; transform.position = new Vector3(transform.position.x,pos,transform.position.z); } } ////* ここまで *//// } }