こんにちは!
XRクリエイターの伊東(@ALAKIWebVRAR1)です。
※TwitterでもAR/VRの事を中心に情報発信中です。
よかったらフォローお願いします!
Follow @ALAKIWebVRAR1
今回は、Unityでオブジェクト間の直線的な距離を計算する方法をご紹介します。
この方法を応用して、距離に応じてオブジェクトを変化させたりすることが可能になります。
シーン構成
今回は「Third Person Character Controller」というプレイヤーコントロールの基本アセットを導入している前提で進めていきます。
Third Person Character Controllerについては、こちらをご参考ください。
次に、最小限のシーン構成をみていきましょう。
Third Person Character Controllerのシーンをもとに、「Targets」という空オブジェクトを作り、「TargetA」「TargetB」2つのオブジェクトを作成しました。
それぞれ、「Cube」ジオメトリと、プレイヤーとキューブとの距離を表示する「Distance」というテキストオブジェクトを配置しました。
実行するとこのような表示になります。
スクリプトを用意
プレイヤーとキューブのオブジェクトとの距離を測って、Distanceに表示させるためのスクリプトを記述しましょう。
任意のフォルダ内に、「DistanceController」という名前でスクリプトを作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class DistanceController : MonoBehaviour { [SerializeField] private GameObject target; [SerializeField] private GameObject player; [SerializeField] private TextMesh counter; void Start() { } void Update() { /* ターゲットのポジションを取得 */ Vector3 targetPos = target.transform.position; /* プレイヤーのポジションを取得 */ Vector3 playerPos = player.transform.position; /* ターゲットとプレイヤーの距離を取得 */ float dis = Vector3.Distance(targetPos, playerPos); /* カウンター */ counter.text = Convert.ToString(dis); } } |
Vector3クラスが持つ「Distance」メソッドに、距離を計算したい対象の2点のGameObjectを渡します。
すると、float型で距離の値が受け取れます。
今回はこれをString型に変換して、テキストオブジェクトに表示させています。
Targetにスクリプトをアタッチ
スクリプトが用意できたので、「TargetA」「TargetB」にアタッチします。
実行
スクリプトがアタッチできたら、実行してみましょう!
できました!
今回は値を取得するだけにとどめましたが、分岐を加えることで様々なことに応用可能ですので、ぜひ今回のメソッドは覚えておくといいでしょう。
最後に
弊社では、日本各地でARを使ったワクワクするプロジェクトをリリースしてまいりました。
ARのパイオニアとして、高い技術力とビジネス提案が可能です。以下のサイトよりお気軽にご相談ください!
■WebAR開発 特設サイト
https://alaki.co.jp/lp/webar/
また最近では、現実のあらゆる場所からデジタルコンテンツを誰でもAR空間にドロップできる「MUGHEN」というアプリをリリースしました。ぜひインストールしていただき、現実を拡張する感覚を体験してみてください!
■MUGHEN サービス紹介サイト
https://alaki.co.jp/lp/mughen/
ALAKI株式会社では、「MUGHEN」をはじめとする最先端技術を使って世の中に価値を提供するため、一緒に大きな目標に挑戦する仲間を募集中です!興味のある方は、以下のリンクからご応募ください!
■ALAKI リクルートサイト
https://recruit.alaki.co.jp/