- 投稿日:2020-01-16T22:53:33+09:00
【unity】questで動くbloomを実装したい
TL;DR
- 上の写真のような、ぼかしのかかった(?)物体を作りたいです
- ググると「postprocessing」という手法が出てくるのですが、クエストだと重くて使えません
- FastMobileBloomという天才アセットを使ってみました
はじめに
- 日本語の実装記事がなさそうだったので。
- また、unityの基本的な操作は触れませんが、やること自体簡単だと思います
- 2020/1/16の記事です。
やったこと
こちらからアセットをインポートします。
これですね。FastMobileBloomの中身はこんな感じです。(2020年1月現在)
FastMobileBloom ┣ FastMobileBloom.cs ┣ FastMobileBloom.shader ┣ FastMobileBloom.mat ┣ readme ┗ testscene/ ┣ Hotel/ ┣ Hotel.unity ┣ Materials/ ┗ Neon_light.fbxHotel.unityを開くとイメージがつかみやすいです。
...で、開けてみてびっくりです。
なんと、cameraオブジェクトの「add component」で「FastMobileBloom」を追加するだけでした
(postprocessingよりもかなり楽)
↑こんな感じで追加すればいいだけです。プロパティで変更できる
thresholdやintensityは、自分で値をいじってみるとわかりやすく変化するので、説明することがないです。素晴らしいですね。
(中身ない記事になりすぎて困惑している)
- 投稿日:2020-01-16T15:19:52+09:00
UnityでOculus IntegrationのSampleFrameworkを使ってOculus Questのハンドトラッキングを試す
はじめに
前回は、公式通りにハンドトラッキングを試しました。
UnityでOculus Questのハンドトラッキングを使ってみる(タッチ&ピンチ)今回は、SampleFrameworkを使ってみます。
サンプルの HandsInteractionTrainScene は試しましたか?
これを参考に、キューブをタッチしたら色が変わるシンプルなものを作っていきます。
環境
Unity 2019.2.17f1
事前準備
- UnityでQuest用のビルドができること
- Oculus Integration Assetsを追加していること
Scene作成
Hierarchy
Oculus > VR > Prefabs > OVRCameraRig を追加
(最初にあったMainCameraは削除しておく)Inspector
OVR Manager (script) > Input > Hand Tracking Support → [Controllers and Hands]
OVR Manager (script) > Tracking > Tracking Origin Type → [Floor Level]手を追加
Oculus > SampleFramework > Core > HandsInteractions > Prefabs > Hands
掌を手前にすると手が黄色くなるので、ホームに戻るジェスチャーをしやすい
インタラクティブツール追加
Oculus > SampleFramework > Core > HandsInteractions > Prefabs > InteractableToolsSDKDriver
FingerTipPokeToolIndex で、人差し指の先に青い丸が表示され、コライダーが付いている状態になる
FingerTipPokeToolMiddle を RightHandTools に追加すると、中指もインタラクティブになる
RayToolで手から線がでるキューブ追加
Cube を追加して CubeButton とする
位置と大きさを適当に調整(Scale:0.2, position: 0, 0.5, 1)CubeButton の下にCreateEmptyで空のGameObjectを4つ作り、それぞれ
ButtonProximity、ButtonContact、ButtonAction、ButtonPlaneCenter にしておくInspector
- ButtonProximity はボタンの近接なので、Scaleを2にしておく
- ButtonContact はボタンの位置なのでそのまま
- ButtonAction は押した位置なので小さくしておく(positionY:-0.3, ScaleY: 0.4)
3つのGameObject全てに↓を反映
- Box Colliderを追加し Is Triggerをチェック
- Add Component で Button Trigger Zone(Script) を追加
- Button Trigger Zone の Parent Interactable Obj に親のCubeButtonを指定
CubeButtonに↓を反映
- Add Component で Button Controller (Script) を追加
- Proximity Zone に ButtonProximity を指定
- Contact Zone に ButtonContact を指定
- Action Zone に ButtonAction を指定
- Button Plane Center に ButtonPlaneCenter を指定
All Valid Tools Tags でどの動作をしたときに有効にするか選べる
CubeButtonController.csスクリプトを作成して CubeButton に追加する
CubeButtonController.csusing System.Collections; using System.Collections.Generic; using UnityEngine; using OculusSampleFramework; public class CubeButtonController : MonoBehaviour { private Renderer renderer; private void Awake() { renderer = this.GetComponent<Renderer>(); } public void ColorChanged(InteractableStateArgs obj) { switch (obj.NewInteractableState) { case InteractableState.ProximityState: renderer.material.color = Color.yellow; break; case InteractableState.ContactState: renderer.material.color = Color.red; break; case InteractableState.ActionState: renderer.material.color = Color.green; break; default: renderer.material.color = Color.blue; break; } } }インタラクティブ情報を取得し、どのステートかによって色を変えています。
- ButtonController の Interactable State Change で+をクリック
- 追加したCubeButtonControllerスクリプトのColorChangeを反映
ビルド
最初青で、近くなったら黄色、キューブに当たったら赤、押し込んだら緑になる
さいごに
手を下に垂らしてお化けのポーズになると、手を認識してくれないので、
真上からボタンを押すことはできなかった。単純に楽しむためなら、簡単で使いやすい。
サンプルのようにボタンの位置がカメラに追従したり、ボタンが凹んだり、色が付いたり、クリック音が鳴ったり、作り込むのはすごいなと思った。次回はHandsを使ったピンチ操作を試します。
UnityでOculus IntegrationのSampleFrameworkを使ってOculus Questのハンドトラッキングを試す (2)
- 投稿日:2020-01-16T12:51:18+09:00
UnityとiPhoneでリアルタイムフェイシャルモーションキャプチャー
PC上のUnityとiPhoneでリアルタイムフェイシャルモーションキャプチャーするアプリ「iFacialMocap」と、ソフトウェア&スクリプトを公開しました。
https://ifacialmocap.jimdofree.com/
現状の3DCG系のVTuberの多くは、おそらく人間の顔の動きをキャプチャせずに「リップシンク」と呼ばれる「声の音」に反応して表情が動いているものと思われます。
現状のVTuberの動きは、「あ」という声を出したら「a」のブレンドシェイプを動かして、「い」という声を出したら「i」のブレンドシェイプを動かして....といった感じで、現実の人間の動きを取り込んでいるわけではなく、音に反応しているだけです。OVRLipSyncというのを使っているのでしょう。
また、VTuberの目・眼球の動きはEyes Animatorというアセットを使っているのではないかと思います。
アニメ調のデザインのVTuberならそれでも良いのですが、ちょっと前にTwitterで伸びていた、以下のようなリアル寄りの3DCGを動かそうと思うと、リップシンクだけでは実現できません。
Digital Human based on Unity HDRP.
— illu (@illustor) December 30, 2019
AR remote, Realtime Raytracing SSAO.
it can follow user's facial moving by iphone.
Individual works by Hyeong-il Kim / Gyutaek Lee#unity #hdrp pic.twitter.com/n1TKZt2m8wしかし、iFacialMocapを使用すると、人間の動きを取り込めるので、上記のツイートのようなモーションキャプチャーも可能です。(モデリングとシェーダーの技術さえあればの話ですが)
ダウンロードは以下から
https://ifacialmocap.jimdofree.com/download/使い方は以下のYouTube動画から確認できます。
https://youtu.be/7zUSQ0tVZco
- 投稿日:2020-01-16T10:13:37+09:00
neovimをUnityの外部エディタにする(macOS)
Unityの外部スクリプトエディタ(External Script Editor)にneovimを登録するためにやったことをまとめます。
やりたいこと
Unity Editorでソースファイルやエラーメッセージをダブルクリックしたとき、
- 端末(iTerm2 + tmux)上で起動済みのneovimにそのファイルを開かせる
- カーソルを指定の行に合わせる
- neovimのカレントディレクトリをUnityのプロジェクトパスに変更する
実行環境
- macOS Mojave(10.14.3)
- iTerm2
- tmux
- neovim v0.4.3
- Unity 2018.3.0f2
実現方法
neovim-remoteによる遠隔起動
https://github.com/mhinz/neovim-remote
neovimは起動時に遠隔指示を受け付けるサーバを立ち上げてくれます。neovim-remoteはそれを利用して、起動済みのneovimに指定のファイルを開かせるコマンドです。
これを使って上記の挙動を実現すると次のようになります。nvr --remote +(行番号) (ファイル名) -c 'cd (プロジェクトパス)'となれば、あとはnvrを外部エディタとして登録し、引数をUnity側で設定してあげればOK……ではありません。nvrを外部エディタとして登録することができないからです。
Automatorで.App化する
macOS版Unity Editorに登録できる外部エディタはCocoa App形式に限られます。つまりnvrそのものや、nvrを実行するシェルスクリプトはそもそも登録することができなくなっています。
ではどうするか?幸いmacOSにはAutomatorがあるので、これを使いましょう。内部的にシェルスクリプトを実行するAppを作成することができます。次のようにAutomator Applicationを設定します。
- 新規Applicationを作成する
- 「シェルスクリプトを実行」を追加し、次のように記述する。また、入力の引き渡し方法は「引数として」を選ぶ。
シェルスクリプトを実行eval "/usr/local/bin/nvr" "--remote" $@
- 上記Applicationを保存する
- Unity側でPreferencesを開き、External Tools画面のExternal Script Editorに上記Applicationを指定する
- 同画面のExternal Script Editor Argsに下記を指定する
"+$(Line) $(File) -c 'cd $(ProjectPath)'"これで完成です!Unity Editor上でC#スクリプトやシェーダファイルをダブルクリックすると、neovimが起動済みであればそちらで開かれます。
今後の課題
ファイルを開いたときにneovim(を起動しているiTerm2)にフォーカスを移したいのですが、これは上記Automator Applicationに追加処理を記述することで実現できそうです。
また、今回はneovimがすでに起動していることが前提になっており、neovim未起動の状態でファイルを開こうとするとエラーになります。ここはどうにか改善したいところです。以上です。
- 投稿日:2020-01-16T07:54:24+09:00
【DOTween】ポップにアニメーションするボタンを作る【Unity】
はじめに
開発中のアプリでDOTweenを使った簡単なボタンアニメーションを作ったので紹介します。
使用しているUIアセット(有償): Simple UI - Asset Store
コード
使用する場合は以下のスクリプトをプロジェクトにインポートし、
Button
コンポーネントの変わりにアタッチしてください。CC0です。Gist: PopButton.cs
PopButton.csusing UnityEngine.UI; using DG.Tweening; using UnityEngine; namespace nkjzm { /// <summary> /// ポップに押されるボタン /// </summary> public class PopButton : Button { Tweener tweener = null; new void Start() { base.Start(); // ボタンアニメーション onClick.AddListener(() => { // 再生中のアニメーションを停止/初期化 if (tweener != null) { tweener.Kill(); tweener = null; transform.localScale = Vector3.one; } tweener = transform.DOPunchScale( punch: Vector3.one * 0.1f, duration: 0.2f, vibrato: 1 ).SetEase(Ease.OutExpo); }); } } }余談
ボタン押下時の機能を
AddListener
するとアニメーションの途中で見えなくなってしまう場合があるので、機能によっては0.2f
秒のラグを入れてあげると良いかもしれません。
- 投稿日:2020-01-16T02:04:12+09:00
【Unity】[Serializable]なSoundPlayerという名前のクラスを作るとビルドは通るがAndroid実機で落ちる
はじめに
タイトルままです。
調べても対処法が出てこず、2時間ぐらい詰まったのでメモ。環境
開発環境
Unity 2019.2.17f1
Windows 10
確認Android環境1
FireHD 10(Fire OS 5.3.7.0)
確認Android環境2
BlueStacks4(OnePlus 5)エラー本文
logcatで怪しかったところ.txt01-15 01:46:13.567: E/Unity(15508): The file '/data/app/com.XXX.XXX-2/base.apk/assets/bin/Data/level0' is corrupted! Remove it and launch unity again! 01-15 01:46:13.567: E/Unity(15508): [Position out of bounds!]解決法
[System.Serializable]なSoundPlayerというクラスの名前を別のものにする(今回はSoundProviderという名前にリネームして解決)
Before
SoundPlayer.csnamespace Hoge { [System.Serializable] class SoundPlayer{ [SerializeField] AudioClip hogehoge; ~~中略After
SoundProvider.csnamespace Hoge { [System.Serializable] class SoundProvider{ [SerializeField] AudioClip hogehoge; ~~中略原因
正直よく分からないですが、元々System.Media名前空間にSoundPlayerというクラスがあります。
SoundPlayer クラス (System.Media) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/api/system.media.soundplayer?view=netframework-4.8おそらくですが[Serializable]ではない同名のクラスが存在するとこのエラーが発生すると考えられます。apk起動時にシーン内のオブジェクトに紐付いたHoge名前空間のSoundPlayerをSystem.Media名前空間内のSoundPlayerでデシリアライズしようとしているとか。
おまけ:解決に至るまで試したこと
上記のエラーをググるとエディタ関係のエラーで参照が切れていると発生するといった記事が出てきます。
が、検索結果に出てきた「LibraryとTempフォルダを削除」、「Reinportする」をしてビルドしても症状は変わらず。この時点で完全に手詰まりで頭を抱えました。
Previewの「2D Pixel Perfect」パッケージを外してみたりしたものの改善せず。
音を付ける前は起動できていたので最近追加した音周りが怪しいということで音周りのコードを確認しました。
で、SoundPlayerという名前のクラスが別にあったので、自作のSoundPlayerの方の名前を変えたら解決しました。当てずっぽうだったので、あんまり褒められたものではありませんが、なんとか前に進むことができました。