イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

ocurasgo開発関連記事のリスト

*OcurasGoではなく、OculusGoであることに今気が付いた。かなり間違って書いてしまっていて訂正も大変なので、修正はせず、以後、OCulusGoと正しい記載をする

 

現在開発してるゲームで使用したノウハウを使用した順番通りに表示している。

 

++初回セットアップ

ocuras go の開発環境を整える(WIndows 10) - イラスト、モデリング、Unity、VR関連

 

++カメラ設定とコントローラの表示

ocurasgoのカメラとコントローラの設定 - イラスト、モデリング、Unity、VR関連

 

++コントローラのオブジェクトの変更

ocurasgo ocuras integrationのコントローラを任意のオブジェクトに置き換える - イラスト、モデリング、Unity、VR関連

 

++コントローラの先端から直線を描写する

ocurasgo コントローラの先端から直線を描写する - イラスト、モデリング、Unity、VR関連

 

++Unityについてのみ

ocurasgoのゲーム開発で使用したunityのノウハウリスト - イラスト、モデリング、Unity、VR関連

 

++OcurasGoの入力の取得

Oculus Integrationで取得出来るOculus Goの主要な入力【Unity】【VR】【アセット】【Oculus Go】 - (:3[kanのメモ帳]

これらのメソッドをupdateメソッド内などで扱う

 

++OcurasGoのデバッグ

adb logcat -s Unity ActivityManager PackageManager

コマンドラインデバッグログを表示
Android/sdk/tools/monitor.exe
でモニターを起動できる

Unity と Mac で開発する Oculus Go アプリ #8 Debug.Log - Qiita

 

++その他

ocurasgoの開発関連ー未整理情報 - イラスト、モデリング、Unity、VR関連

 

blender 小ネタ集

++ベイクが部分的に出来ない場合

・小分けにしてベイクする

・何回もやる(片方ベイク出来たと思ったら、もう片方をベイクしたらその出来たベイクが消える、みたいな現象が起きたとき、何回もやってたら両方できた

・複数のメッシュをベイクする場合、ベイク時に複数のメッシュを選択しておく必要がある。

・マテリアルノードにベイク先となるUVの要素を置いてない

・他のメッシュとマテリアルを共有している部分はベイクがうまく出来ないっぽい。=>単にベイク先のUVをマテリアルノードに追加するのを忘れていただけかも

 

++マテリアルノードの要素はctrl+c,ctrl+vでコピペできる

 

++メッシュを複数選択して編集モードでAを押すとblenderが落ちる場合

選択したいメッシュを分けて選択して、Aを繰り返したら回避出来た。

 

++2.8でtexture paintレイアウト?に切り替える

オブジェクトモードで上のタブの左端にある+をクリックして、そこから選択

f:id:arumogina:20190203141024p:plain

 

Unity しょうもないミス + 小ネタ集

Unityのしょうもないミスと小ネタをここにまとめていく。

 

++Standard Assetsを適用してるのに歩けない、と思っていたら、ビルド設定をVRゲーム用に設定していたからであった

 

++Unity Clothコンポーネントを複数メッシュに付与してそのクロスコンポーネントの球同士が接触していると、メッシュが荒ぶってしまう。

 

++Unityクロスコンポーネントを付加するとメッシュの一部が消える問題に遭遇。どうもクロスコンポーネントを付与すると1つを残してマテリアルが剥がれてしまうようだ

 

++取り込んだモデルが透明になる場合、

マテリアルのRendering TypeがTranspearentになってしまってるのが原因。Opaqueに直す。なお、デフォルトだとマテリアルの設定を変えられないので、prefabのモデルをクリックし、インスペクタのMaterialに移動、LocationのUse External Material(Legacy)に変更しApplyを押す

 

++メッシュを統合すると片方のテクスチャが剥がれる?場合

UVマップが一致してないのが原因。UVマップを同じにすればいい。

+を押せばUVMapが生成されるのでこれにすれば楽。

f:id:arumogina:20190202135748p:plain

 

 

++モデルをUnityに取り込むときはテクスチャを先に入れておいた方がよい。よくわかってないが、先にテクスチャを入れておかないとUnity上でモデルにテクスチャが自動で貼り付けられない

 

++UnityでWebGLでビルドすると、デフォルトのフォントに日本語が含まれてないために日本語が表示されない。日本語を使うには日本語のフォントを含める必要がある。

UnityのWebGLで日本語を表示する - Qiita

 

++UnityでWebGLでビルドするときIL2CPPを使うっぽいのだが、これがすごく時間がかかる。SSDにしたり、Windows Defenderをオフにすると早くなるらしい

IL2CPP ビルド時間の最適化 - Unity マニュアル

++

OnSceneLoadとStartだとLoad=>Startの順で呼ばれる

 

++日本語化すると一部のコンポーネント名まで日本語化されて英語で検索しても出てこないときがある。

 

++Start()はインスタンス化した時点でのシーンでしか呼ばれないっぽい。DontDestoryOnLoadしたら次のシーンでは呼ばれない

 

++エラーがあるとスクリプトのアタッチが出来ないっぽい。

 

++EasySoundManagerというアセットを導入してリファレンスを見ながら作業していたが、特定のメソッドについて存在しない、というエラーが返ってくる。調べてみると、ストアに置かれてるアセットが古いもので、リファレンスが更新されていたのが原因であった。GitHubから最新版を落としてくることで解決

 

++オブジェクトにそのコンポーネントを付加してないのに(AudioSorceなど)そのオブジェクトに追加したスクリプト内で

gameObject.GetComponent<AudioSorce>とかしてた。 

 

++オーディオ関連の操作がおかしい(例えば、ゲーム開始時に再生、しないようにしてるのにBGMが流れる)と思ったら、知らない間に全く別のオブジェクトにBGMを適応していた。

 

++Unityのカメラプレビューの映像とゲーム実行時のシーンが一致しない。=>良くわからないままUnityを再起動したら回復したので、Unityのバグだったんではないか、という気がする。

 

++スクリプト側で速度の変数をいじっても実行時に変更されない

=>変数をpublicで公開しており、インスペクタで設定された値が設定されていた。

 

++GetComponent<Rigidbody>();でエラーが出る。

メンバ変数を宣言するところに直接書いてたら出た。

start()内で書いたら通った。

unity particleのsub emitterで割り当て時にエラーが出た場合

The assined sub emitter is part of a prefab and can therefore not be assigned.

と出た場合。

sub emitterに割り当てようとしてるパーティクルがその割り当て先となるパーティクルの子要素になってないのが原因。パーティクルの子要素にすればいい。

割り当てるパーティクルはアクティブ状態にし、パーティクルを停止しておく必要がある。

vrchat アニメーションでloop timeにチェックが入ってないのにループする問題

vrchat用のアバターで、非アクティブのオブジェクトをアクティブにし、再び非アクティブにするというアニメーションを作成した。

そのアニメーションがなぜかループして、現れたり消えたりを繰り返す。loop timeにチェックは入ってない

 

キーフレームが、

非アクティブ=>アクティブ=>非アクティブにするとループする。

非アクティブ=>アクティブ、だけならループしない

 

追記:

うっかりしてたが、元々は

シェイプキーで口を開ける=>チャージパーティクルをアクティブに=>チャージパーティクルをアンアクティブに&レーダーパーティクルをアクティブにする、という問題から始まったのだが、このときはチャージパーティクルが現れては消えるを繰り返す、という現象であった。なので、アニメーションがループしてるというよりは、アンアクティブにしたオブジェクトが勝手にアクティブになる、と考えるべき。

 

暫定的な対策:

多分、アニメーションが終了してなければループはしないはずなので、アニメーションを10分とか長く設定しておけばいいはず

 

解決?

VRChatのハンドサインやエモートにアニメーションを入れるとき1フレーム以上のアニメーションを入れるとバグりやすくなるらしい。VRChatでアニメーションを入れるときは、アンアクティブな空のオブジェクトに目的のアニメーションをアタッチし、それをハンドサイン・エモートでアクティブにすることでアニメーションを実行すればいい、とのこと

vrchat アバターに仕込んだパーティクルとミラーとカメラについて

++アバターに仕込んだパーティクルはアニメーションで出す場合、他の人にはミラー上に映る場合でも自分からは見えない

 

++アバターにカメラを仕込むと、アバターの視界がカメラに切り替わるのでそれをアニメーションオーバーライド等で切り替えるとアバターを客観的に見ることが出来て便利。ただ、カメラのAudioLisnerコンポーネントは削除する必要がある。

(VRChatユーザーの方に教えてもらった)

 

++パーティクルの方向をアバターの動きに合わせて変えたい場合、追従させたいアバターの部位のアームチュアにパーティクルを配置し、Simulation SpaceをLocalにする。worldだと追従しない。

local,worldはパーティクル生成後の動きに関する設定である。

パーティクルを出してるオブジェクト自体は常にアバターに追従するので、worldに設定してようと発射する最初の向き等はアバターの動きによって変化するはずなのだが、なぜか追従してくれない(顔の上下の動き等は追従しないが、アバターの移動には追従する)。

vrchat アバターが沈みこむ場合

++Blender等でモデリングした時の高さの座標がゼロより下になっている場合

=>モデルの最底部がゼロになるようにすればいい

 

++ハンドサインに独自のアニメーション等を入れた場合に沈む場合

VRCSDKのIdle-SampleをAnimationOverrideのIdleに入れる

f:id:arumogina:20190312070728p:plain

 

++Emoteに独自のアニメーションを入れた場合

そのアニメーションにアームチュアのアニメーションを仕込む。といえってもコピペでOK。IdleSampleのアニメーションクリップを開き、キーフレームの一番上の♢をクリックすると、その列全てのキーフレームが選択されるので、Ctrl+C

f:id:arumogina:20190315084739p:plain

入れたいアニメーションクリップに移動し、左側の欄でctrl+v

これで沈まなくなる