/// <summary> /// コライダ衝突時のイベント /// </summary> /// <param name="collision">衝突対象</param> private void OnCollisionEnter(Collision collision) { // マグネット以外は処理対象外 if (collision.transform.tag != GameUtil.Const.TAG_MAGNET) { return; } // 衝突対象のマグネを取得 MagnetController colMagController = collision.transform.GetComponent <MagnetController>(); // 衝突対象が落下状態で、自身がタワー(マグネット)状態の場合 if (status == State.TOWER_MG && colMagController.status == State.DROP) { // マグネ結合処理 if (GetComponent <Magnet>().attract) { // 落下マグネの高さ以外の位置・回転を合わせる collision.transform.GetComponent <Rigidbody>().velocity = Vector3.zero; collision.transform.rotation = Quaternion.Euler(0.0f, transform.localEulerAngles.y % 360.0f - 180.0f, 0.0f); // タワー(非マグネット)状態に遷移 colMagController.status = State.TOWER_MG; collision.transform.GetComponent <Magnet>().enable = true; collision.transform.GetComponent <Rigidbody>().isKinematic = true; // 自身のマグネットを無効化 status = State.TOWER; GetComponent <Magnet>().enable = false; // カメラターゲットを変更 cameraController.SetLookTarget(collision.gameObject); // スコアを加算する gameSceneManager.AddScore(); } } }