20220127のUnityに関する記事は3件です。

【Unity】DeviceSimulatorインストール方法

はじめに Unity2021から変更があった様ですので、記録を残します。 Unity2021 UnityEditorに標準インストールされています。 ※知らずにパッケージマネージャーをひたすら検索しまくってました。 Unity2020以前 パッケージマネージャの歯車ボタンをクリックし、AdvancedProjectSettingsを選択する。 2.EnablePreviewpackagesのチェックを入れ、I understand を選択する。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Oculus Integration の LipSync 機能で、マイクで話した音素を直接取得する

Unityを使ってVRでアレなゲームを作成しています。 VRのゲームってコントローラーで操作するのが結構煩わしいので、「音声認識で操作出来たらいいなー」などと思いいろいろ調べたことを備忘録程度に書きます。 やりたいこと/やったこと Unity で Oculus Integration を使って Oculus Quest2 用のゲームを開発しています。 その際に喋った言葉を解析して操作をさせたいです。 喋った言葉を全部ひらがなに直すのは結構難しそうなので、簡易的に音素を取得して代用することにしました。 Oculus VR での音声認識に関して まず前提として、Oculus Quest2 のVRゲームで音声認識(喋った言葉をひらがなに変換する)はどうも結構難しそうです。 以下参考にした記事など UnityEngine.Windows.Speech よさげですがwindows端末でしか使えないようです。無念。 【Unity(C#)】OculusQuestでAndroidネイティブの音声認識機能を呼び出せるのか検証 Androidの機能を使っているようです。こちらもよさげですがVRでは使えないという結論(自分では検証してないのですが、、、) 【Unity(C#)】Watson API × OculusQuestで音声認識 完全に音声認識できていますが、Watson APIでお金かかりそうなのと、そもそも今回そこまでたくさんの言葉を認識させるつもりはないので今回はスルー。次回作あたりで使うかも ということで途方に暮れていましたが、「LipSyncって音素は取得できているみたいだし、これの数値直接取得したら何とかなるのでは?」と思ってやってみたら音素の取得自体は結構簡単でした。 LipSyncの音素取得 LipSyncの基本機能はデモシーン(Oculus > LipSync > Scenes > LipSync_Demo シーン)を参考にしました。 このシーンの中で重要なオブジェクトは InputType_Microphone で、僕のやりたいことはほぼここに詰まっているようです。 OVRLipSyncContext マイクで取得した音声の音素を解析して、frameにぶち込みます。解析の細かい内容は不明。とりあえずframeを抜き出せば音素量が数値で取得できる。 ご丁寧に GetCurrentPhonemeFrame という関数でほかのスクリプトから frame をそのまま取得させてくれる。 OVRLipSyncContextMorphTarget OVRLipSyncContextのframeの内容を、SkinnedMeshRendererに反映して口の動きを制御する。 今回は誰かを喋らせるわけではなく、音素量を取得したいだけなので、特に必要ない。 というわけで、外から OVRLipSyncContext の frame を取得して音素を解析します。 自作スクリプト LipSyncContextGetter.cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class LipSyncContextGetter : MonoBehaviour { private OVRLipSyncContextBase lipsyncContext = null; OVRLipSync.Frame frame; // Start is called before the first frame update void Start() { lipsyncContext = GetComponent<OVRLipSyncContextBase>(); } // Update is called once per frame void Update() { // sil、PP、FF、TH、DD、kk、CH、SS、nn、RR、aa、E、ih、oh、ou frame = lipsyncContext.GetCurrentPhonemeFrame(); for (int i = 0; i < 15; i++) { Debug.Log(frame.Visemes[i]); } } } 今回はとりあえずここまで。 この方法で操作できたかどうかまた記事書く予定です。 せっかくだから前作のリンクを置きたいのだけど、QiitaってDLSiteのR18作品のリンクとか載せたら怒られるのかな、、、
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GameObjectがPrefabかどうか判定する

GameObjectがPrefabかどうか(SceneにInstantiateされていないGameObjectであるか)を判定します。 public static bool IsPrefab(this GameObject gameObject) { return !gameObject.scene.IsValid(); } GameObjectがPrefabの場合、GameObject.scene.IsValid()はfalseになります。 UnityEngine.SceneManagement.Sceneはstructなので、IsValidを使用して判定します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む