概要
この記事はVCI作成において引っかかりそうな箇所と解決策をケース別に記載したものです。
右側に表示されている見出しから見るのがわかりやすいと思います。
原因の部分に記載していない内容が原因のケースもありますのでご了承下さい
自分用のメモの役割も強いため、形式などはあとから変更するかもしれません。記事置くサイト自体も変えるかもしれません。
記載に間違っている所があれば指摘お願いします
また、この記事に乗っていない内容で「こんなところで引っかかったよ」というものがあればコメントで教えていただけると助かります。
問題発生時に共通で確認すべきこと
- VCIが出力されないときはunityのコンソールにエラーが出てないか確認する。
- コンソールが表示されてない場合はメニューで Window>General>Consoleの順に選択する
- VCIを上書き出力してる人は更新日を見て正しく出力されているかを確認する(まれにエラーが出てないけど出力されないケースがあり、それを切り分けたいため)
- Vキャス上で正しくスクリプトが動かない場合は開発者用コンソールログでエラーが出てないか確認する
- 同様の現象が起きていないかtwitterなどで検索する
- 自分がなにか困ったことをtwitterで書き、その後解決したときはそれもツリーで記載しましょう!後で検索した人が助かります!
故障かな?と思ったら
VCI出力・読み込み関連
VCI出力時にエラーのダイアログが表示される
■よくある原因
① VCIObjectがついてないオブジェクトを選択した状態でVCIを出力する
② VCIObjectの必須項目が入っていない
■解決策
基本的にメッセージに原因が書かれているのでそれを解決する
エクスポートまでは押せるがVCIが出力されない
■よくある原因
Unityのコンソールにエラーが有る場合
① VCIObject直下じゃない部分にVCISubItemが入っている
② アニメーションの階層関係が壊れている
(アニメーション設定後にSceneで階層変更とかしたとき起きやすい)
③ アニメーションを設定しているオブジェクト自体を動かそうとしている
その他
④ 出力したと思ってるフォルダと実際に出力したフォルダが違う
■解決策
基本的にメッセージに原因が書かれているのでそれを解決する
① VCISubItemはVCIObjectの直下のみに入れるようにする
② アニメーションを確認し、構成が壊れている(黄色くなってる)部分を修正する
③ 以下のように動かしたいアイテムをアニメーターの子オブジェクトにする
1. 空オブジェクト(A)を作成
2. Aに動かしたいオブジェクト(B)を入れる
3. Bにアニメーターを追加し、
4. Bを動かす設定をする
④ もう一度VCI出力してみて出力先のフォルダを確認する
VCIを出したときに緑色のクリスタルが出る
■よくある原因
① 使えないバージョンのuniVCI(≠最新版)を使用している
(ベータ用に作ったVCIを安定版で出したとき等)
■解決策
① 使えるのuniVCIのバージョンでエクスポートしなおす
クリスタルは出ないがアイテムも出てこない
■よくある原因
① アイテムが出てくる前に重力で下の方に落下してしまっている
② アイテムが互いにぶつかり合って弾け飛んでいる
③ 離れた位置に出ている
③ 地面に出てる(SubItemの位置が低い)
■解決策
① 重力無効化の設定をする(SubItemのRigidbodyComponentのUseGravityをOFFにする)
② 物理挙動が必要ないならisKinematicをオンにする
物理挙動が必要ならぶつからない用にアイテムを配置する
③④ Unity上で適切な位置になるように調整する
VCIObjectのついたオブジェクトの位置は反映されないので注意
Unity上で反映したBlendShapeが反映されない
■よくある原因
① 調査中
■解決策
① 調査中
VCI更新関連
VCIを差し替えても変わらない
■よくある原因
① 再読み込みをしていない
② アップするVCIを間違えている(旧verのVCIなどを上げている)
③ Seedの別のアイテムに上書きしてしまった
■解決策
① メニューでシステム>インベントリ更新を押してから出し直す
②③ VCIとSeedのアイテム名を確認する
luaのコードが更新されない
■よくある原因
① Unity側でVCIObjectに設定されているスクリプトの変更をしていない
② scriptに同名の別ファイルが紐付いている(VCIObjectのscriptにファイルを設定している場合のみ)
③ mail.luaが存在しておりそちらが動作している
■解決策
① Unity側でスクリプトの変更をする
③ 正しいファイルと紐付けを行う
③ main.luaを削除する(リネームでも可)
VCI操作関連
アイテムがつかめない
■よくある原因
① Subitemのつけ忘れ
② SubItemのGrabbableにチェックつけ忘れ
③ コライダーのつけ忘れ(Blenderから持ってくるときや、PlaneとかQuad使ったときに起こりやすい)
④ 他のSubItemが重なっていて他のSubItemをuseしている判定になっている
(FixedJoint使っているときになりがち)
■解決策
① Unityで対象オブジェクトにVCISubItemのコンポーネントをつける
② SubitemのGrabbableにチェックを入れる
② コライダーをつける
④ コライダーを重ならないようにする
unity上でコライダーの順番を変更する(TODO:後で詳しく書く)
拡縮したらいきなりサイズが大きくor小さくなり、もとに戻らない
■よくある原因
① Unity上で設定しているScaleがSubitemの設定可能範囲を超えている
■解決策
① 1.Subitem付きの空オブジェクト(A)を作成する。このオブジェクトのScaleはSubitemに設定可能な範囲の値にする(TODO:URL)
2.大きさを変えたいオブジェクトをAの子オブジェクトに変更し、サイズを調整する
出したアイテムがふわふわ浮いていく
■よくある原因
① 物理演算の影響無効化の設定がされていない
■解決策
① SubItemを追加したオブジェクトのRigidbodyComponentのIsKinematicにチェックを入れる。
アイテムをグリップしても反応しない
■よくある原因
① 他のSubItemが重なっていて他のSubItemをuseしている判定になっている
(FixedJoint使っているときになりがち)
■解決策
① コライダーを重ならないようにする
unity上でコライダーの順番を変更する(TODO:後で詳しく書く)
回転のアニメーションが動かない
■よくある原因
① アニメーションの回転のプロパティ項目がQuotanionになってる
■解決策
① 回転をEulerかEuler(Quotanion)に変更する
参考:VCIでPDCAを回す(回転アニメーションの罠)
装着できない
■よくある原因
① VCIAttachableのコンポーネントの追加忘れ
② 装着範囲が小さい
③ ボーンの装着可能な位置を勘違いしている
■解決策
① 装着したいアイテムにVCIAttachableをつける(Subitemではなくその子アイテムでも可)
② 装着範囲を大きくする
③ ボーンの装着可能なのはボーンの根っこの部分なので、そこに合うように装着範囲を変更する(TODO:ホントか要確認)
同期関連
VCIがコードで動かせない・動いても元の位置に戻る
■よくある原因
① 所有権がないオブジェクトを動かそうとしている
(アイテムは所有権を持ってる人の位置が同期されるため、動かしても上書きされてしまう)
② 掴んでるもの移動しようとしている
■解決策
① ボタンなどを押して動かそうとしている場合はボタンと動かしたいもののグループIDを一緒にする
② 掴んでるSubitemの移動はできない(仕様)。表示を消したい場合は移動ではなくSetActiveを使って表示を消す。
スクリプトで動かしたアイテムが他の人と同期しない
■よくある原因
① Subitemのつけ忘れ
② 子アイテムを移動している
■解決策
① Subitemをつける
② 子アイテムではなくSubItemにする。または他の人のスクリプト上でもアイテムを動かす
アニメーションやエフェクトが他の人で再生されていない
■よくある原因
① _ALL_のついてない関数を使っている
■解決策
① _ALL_のついている関数を使う
アニメーションやエフェクトが多重再生される(音小さくしているのに爆音になる)
■よくある原因
① updateAllなど皆で実行される関数内で_ALL_のついている関数を使っている
■解決策
① 以下のいずれかに処理を変更する
1.useやupdate等特定の一人で動く関数内で_ALL_のついている関数を使う
2._ALL_のついていない関数を使用する
main.lua(アンダーバーなしのやつ)で修正した内容が他の人に反映されない
■よくある原因
① 現状main.luaは他のユーザの凸後にmail.luaを更新しないと内容が他の人に反映されない仕様となっているため
■解決策
① main.luaに変更を加えて保存する
その他スクリプト関連
Stateに設定した値が取得できない
■よくある原因
① Stateを設定後同フレームで読み込みしている。
(Stateへの値反映はSet呼んで即行われないため、Getしても値がまだ変わっていない)
② State設定をメッセージ送信を同時に行い、別の人がそれを読み込んでいる
(AさんでState設定&メッセージ送信をし、Bさんでメッセージを受け取りStateを読むような処理をしている)
■解決策
① State設定した同フレームで読み込みは行わない。
② Stateの反映タイミングが必ずしもメッセージ到着より先になるとは限らないため、同時使用はしない
上記のケースは必要な情報はStateで渡すのではなくメッセージの内容として渡すようにする。
functionがあるのにvci.message.Onで紐付けができない
■よくある原因
① vci.message.Onの設定の段階でまだfunctionが定義されていない
■解決策
① functionの宣言をメッセージの紐付けより前に書く
GetTransformで思ったアイテムが取得できない
■よくある原因
① 同じ名前のアイテム(SubItemありなし問わず)があり、別のアイテムを取得している
■解決策
① オブジェクトの名前をかぶらないようにする