本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。
ホロモンが何かを見つけた時に瞳孔が開くようにしたメモです。
ホロモンが何かを見つけた時に瞳孔が開く
以下の記事で作成したホロモンの瞳孔を操作する仕組みを利用します。
bluebirdofoz.hatenablog.com
bluebirdofoz.hatenablog.com
今回は以下のロジックに瞳孔を開くコードを追加することで、何かを見つけた時にホロモンの瞳孔が開くようにしました。
bluebirdofoz.hatenablog.com
以下の頭部の視線変更を行うスクリプトに前回スクリプトの参照を追加しました。
何か発見すると同時に瞳孔を開く関数を呼び出しています。
・HoloMonHeadLogicLookAtTarget.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UniRx;
using System;
using HoloMonApp.CommonSpace;
using HoloMonApp.ActionSpace;
namespace HoloMonApp.HeadLogicSpace
{
public class HoloMonHeadLogicLookAtTarget : MonoBehaviour, HoloMonHeadLogicInterface
{
<summary>
</summary>
[SerializeField, Tooltip("視線ロジック共通情報")]
private HoloMonHeadLogicCommon p_HeadLogicCommon = new HoloMonHeadLogicCommon();
<summary>
</summary>
<returns></returns>
public HoloMonActionHeadStatus GetHoloMonHeadStatus() => p_HeadLogicCommon.HeadLogicStatus;
<summary>
</summary>
<returns></returns>
public IObservable<HoloMonActionHeadStatus> GetHoloMonHeadStatusEveryValueChanged()
=> p_HeadLogicCommon.IObservableHeadLogicStatusEveryValueChanged;
<summary>
</summary>
public bool EnableHead()
{
EnableSetting();
p_HeadLogicCommon.SetHeadStatus(HoloMonActionHeadStatus.Runtime);
return true;
}
<summary>
</summary>
public bool DisableHead(HoloMonActionHeadStatus a_DisableStatus)
{
DisableSetting();
p_HeadLogicCommon.SetHeadStatus(a_DisableStatus);
return true;
}
<summary>
</summary>
<returns></returns>
public bool ApplySetting(HeadLogicSetting a_HeadLogicSetting)
{
ApplyData(a_HeadLogicSetting);
return true;
}
<summary>
</summary>
[SerializeField, Tooltip("設定アクションデータ")]
private HeadLogicLookAtTargetData p_Data;
<summary>
</summary>
[SerializeField, Tooltip("ホロモン頭部視点の制御コンポーネント")]
private HeadLookControllerSmooth p_HeadLookController;
<summary>
</summary>
[SerializeField, Tooltip("ホロモン瞳孔部の制御コンポーネント")]
private PupilAnimationController p_PupilAnimationController;
<summary>
</summary>
[SerializeField, Tooltip("HeadLookControllerの各ボーンの最大角デフォルト設定")]
private float p_DefaultMaxBendingAngles;
<summary>
</summary>
[SerializeField, Tooltip("HeadLookControllerのアニメーションオーバーライドのデフォルト値")]
private bool p_DefaultOverrideAnimation;
<summary>
</summary>
void LateUpdate()
{
if (p_HeadLogicCommon.HeadLogicStatus == HoloMonActionHeadStatus.Runtime)
{
p_HeadLookController.target = p_Data.TargetObject.transform.position;
}
}
<summary>
</summary>
private bool EnableSetting()
{
ChangeMaxBendingAngle(true);
ChangePupilExpansion();
return true;
}
<summary>
</summary>
private bool DisableSetting()
{
ChangeMaxBendingAngle(false);
return true;
}
<summary>
</summary>
private bool ApplyData(HeadLogicSetting a_HeadLogicSetting)
{
p_Data = a_HeadLogicSetting.HeadLogicLookAtTargetData;
return true;
}
<summary>
</summary>
<param name="onoff"></param>
private void ChangeMaxBendingAngle(bool onoff)
{
int segmentnum = p_HeadLookController.segments.Length;
if (segmentnum > 0)
{
for (int loop = 0; loop < segmentnum; loop++)
{
float setValue = 0;
if (onoff)
{
setValue = p_DefaultMaxBendingAngles;
}
p_HeadLookController.segments[loop].maxBendingAngle = setValue;
}
}
p_HeadLookController.overrideAnimation = onoff ? p_DefaultOverrideAnimation : false;
}
<summary>
</summary>
private void ChangePupilExpansion()
{
p_PupilAnimationController.ExpansionAction();
}
}
}
動作確認
シーンを再生して動作を確認します。
以下のように新しいオブジェクトを発見したときにホロモンの瞳孔が少し大きくなります。
細かいですが、ホロモンが対象に興味を持ったことが何となく感じ取れます。