MRが楽しい

MRやVRについて学習したことを書き残す

HoloLens2でホロモンアプリを作る その20(お肉を正面方向に投げるように登場させる)

本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。
f:id:bluebirdofoz:20210324231455j:plain

今回はお肉を正面方向に投げるようにスポーンさせるメモです。

正面方向に慣性を設定する

ボタンを押したとき、指定のオブジェクトから正面方向にお肉を投げるように登場させます。
Rigidbody の AddForce と Transform の forward を利用します。
docs.unity3d.com
docs.unity3d.com

以下のような自身のオブジェクトを指定位置から正面方向に登場させるスクリプトを作成しました。
・ItemFoodController.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

namespace HMProject.Item
{
    public class ItemFoodController : MonoBehaviour
    {
        /// <summary>
        /// 投擲基準位置
        /// </summary>
        [SerializeField, Tooltip("投擲基準位置")]
        private Transform p_ThrowPosition;

        /// <summary>
        /// NavMesh追跡ポイント
        /// </summary>
        [SerializeField, Tooltip("NavMesh追跡ポイント")]
        private Transform p_NavMeshTrackingPoint;

        /// <summary>
        /// デフォルト座標
        /// </summary>
        [SerializeField, Tooltip("デフォルト座標")]
        private Vector3 p_DefaultWorldPosition;

        /// <summary>
        /// 開始処理
        /// </summary>
        void Start()
        {
            // デフォルト座標を保存
            p_DefaultWorldPosition = this.transform.position;

            // 初期状態は無効とする
            this.gameObject.SetActive(false);
        }

        /// <summary>
        /// 定期処理
        /// </summary>
        void Update()
        {

        }

        /// <summary>
        /// オブジェクトリセット
        /// </summary>
        public void RestObject()
        {
            // 慣性をリセットする
            this.gameObject.GetComponent<Rigidbody>().velocity = Vector3.zero;

            // デフォルト位置に戻す
            this.transform.position = p_DefaultWorldPosition;

            // オブジェクトを無効化する
            this.gameObject.SetActive(false);
        }

        /// <summary>
        /// 投げ渡す
        /// </summary>
        public void ThrowObject()
        {
            // オブジェクトを有効化する
            this.gameObject.SetActive(true);

            // 投擲基準位置にオブジェクトを移動する
            this.transform.position = p_ThrowPosition.position + (p_ThrowPosition.up * 0.2f);

            // 一旦、慣性をリセットする
            this.gameObject.GetComponent<Rigidbody>().velocity = Vector3.zero;

            // 投擲位置の正面方向を取得して慣性の設定を行う
            this.gameObject.GetComponent<Rigidbody>().AddForce(p_ThrowPosition.forward);
        }
    }
}

f:id:bluebirdofoz:20210324231623j:plain

スクリプトをお肉オブジェクトに追加してボタン実行時に ThrowObject 関数を呼び出すよう設定します。
f:id:bluebirdofoz:20210324231635j:plain

シーンを再生して確認します。
ボタンを押したとき、お肉が正面方向に投げるように登場するようになりました。
f:id:bluebirdofoz:20210324231643j:plain