MRの技術ではないですが、ユニティちゃんがこちらを見るようにします。
これでユニティちゃんがプレイヤーを認識しているように見え、より現実味が増すはずです。
参考にしたのはこちらです。
・こっち向いて機能の実装
http://unimake2.blog.fc2.com/blog-entry-21.html
AssetStoreから『HeadLookController』をインポートします。
紹介ページにある通り、HeadLookController.csを少し改造してカメラの方を見るようにします。
設定時、カメラにアタリ判定(Collider)を付けるのを忘れないようにしましょう。
実行してみるとこんな感じ。
横を向いているユニティちゃんに近づくと…
こっちを見ました。HeadLookControllerの仕様上、瞳は動かないのが残念です。今後の課題とします。
今回は説明の通りに行わず、少しアレンジしてみました。
ユニティちゃん側で衝突判定を行うLookColider.csについて以下の実装コードとしました。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class LookCollider : MonoBehaviour { AudioSource audioSource = null; public string searchTarget = "MainCamera"; public GameObject messageTarget; public AudioClip impactClip = null; public float impactVolume = 0.5f; // Use this for initialization void Start () { // Add an AudioSource component and set up some defaults audioSource = gameObject.AddComponent<AudioSource>(); audioSource.playOnAwake = false; audioSource.spatialize = true; audioSource.spatialBlend = 1.0f; audioSource.dopplerLevel = 0.0f; audioSource.rolloffMode = AudioRolloffMode.Logarithmic; audioSource.maxDistance = 5f; audioSource.volume = impactVolume; } void OnTriggerEnter(Collider col) { HeadLookController con; // 衝突対象が検索対象ならば実行 if(col.tag == searchTarget) { //ルックコントローラを有効化 con = messageTarget.GetComponent<HeadLookController>(); con.enabled = true; //音声を再生 audioSource.clip = impactClip; audioSource.Play(); } } void OnTriggerExit(Collider col) { HeadLookController con; // 衝突対象が検索対象ならば実行 if (col.tag == searchTarget) { //ルックコントローラを無効化 con = messageTarget.GetComponent<HeadLookController>(); con.enabled = false; } } }
ユニティちゃんが離れたときはHeadLookControllerのスクリプト自体を無効化することで
視線の追跡を行わないようにしています。
HeadLookControllerの設定に変化が発生しないため、こちらの方が安全なはず?
後ついでに声も出るように…。やり方は前回勉強した立体音響の流用です。
・HOLOLENS 立体音響を再生する SPATIAL SOUND
https://azure-recipe.kc-cloud.jp/2016/12/hololens-tutorial5/
変なところに拘りだしてしまう。楽しい。