2019年8月29日木曜日

[Unity] アニメーションキャラを吹っ飛ばす(ラグドール)

UnityでRagdollという機能がありますが、使ったことが無かったので使い方をメモしておきます。
Ragdollを使うと、人形のように吹っ飛ばすことができるようになります。


今回使用したUnityのバージョンは 2018.4.1f1です。

1.必要なアセットをインストール
 キャラクターの当たり判定(Collider)をメッシュやボーンに沿って自動的に設定してくれる便利なアセットです。
 ・SAColliderBuilder
 https://assetstore.unity.com/packages/tools/sacolliderbuilder-15058
  
 


2.キャラクターを画面に配置
 ボーン入りのキャラクターを画面に配置します。
 配置する際は、ルート(どのオブジェクトの子供ではない場所)に配置してください。理由としてはAnimatorの設定をスクリプトで操作する際に面倒だからです。
 ついでにアニメーションなども設定しておきます。
 
 今回は別途購入したゾンビキャラで実験です。

3.Colliderを設定
 先ほどのアセットを使って、Colliderを設定します。
 ①Animatorが設定されているキャラクターを選択し、右下の「Add Component」をクリックします。
 ②一覧から、「SA Bone Collider Builder」を選択します。
 
 ③ SA Bone Collider Builderの設定を次のようにします。
  Shape Type : Capsule
  Optimize Rotation :チェックを外す
  is Kinematic:チェックを外す
  user Gravity:チェックを付ける
  Collision Dectection Mode : Continuous Dynamic
  設定したら、「Process」をクリックします。
 


 以上で、Boneに沿ってColliderが自動生成されます。

4.Ragdollを作成
 ①Hiearchyから先ほど追加したキャラクタを選択し、Hierarchyの左下にある「Create」をクリックし、「3D Object > Ragdoll」をクリックします。

 ②Ragdollの設定画面が開くので、ボーンをひとつずつ設定してあげます。大体名前が一緒のはずですが、違う場合はめんどうですが位置を確認しながら設定していきましょう。最後に「create」をクリックします。
 
 そうすると、設定したボーンのところに「Character Joint」が追加されているのがわかります。これがRagdollの正体です。


5.実験
 とりあえず、適当な球を当てたときに動作するか実験してみます。
 ①ルートに空のゲームオブジェクトを作成します。今回は「tama」にしてみました。


 ②次に球体を作成します。「tama」を右クリックして、「3D Object > Sphere」を選択します。
 
「tama」の方向や大きさなどは適宜修正します。
 
 ③ つぎに球を発射するスクリプトを作成します。
 Hierarchyから「tama」をクリックし、「Add Component」で「GenerateTama」と入力して「New script」をクリックします。

 ④以下のスクリプトを貼り付けます。
GenerateTama.cs

    
void Update()
{
    if (Input.GetMouseButtonDown(0)) {
        GameObject tama = Instantiate(transform.Find("Sphere").gameObject , transform.position, Quaternion.identity);
        tama.SetActive(true);
        Rigidbody rigid = tama.GetComponent<rigidbody>(); 
        rigid.AddForce(transform.forward * 10, ForceMode.Impulse);
        Destroy(tama, 3.0f);
    }
}

⑤SphereにRigidbodyを追加します。
 HierarchyからSphereをクリックして、「Add Component」から「Rigidbody」を選択します。
 

⑥Sphereにもスクリプトを追加します。
  HierarchyからSphereをクリックして、先ほどと同様にスクリプトを追加します。
  名前は「HitTama」にします。
 

⑦以下のスクリプトを貼り付けます。
HitTama.cs
void OnCollisionEnter (Collision col)
{
    if (col.rigidbody!=null)
    {
        GameObject target = col.transform.gameObject;
        GameObject root = col.transform.root.gameObject;
        Animator anim = root.GetComponent<Animator>();
        anim.enabled = false;

        Rigidbody rigid = col.rigidbody;
        rigid.isKinematic = false;

        rigid.AddForce(transform.forward * power,ForceMode.VelocityChange);
    }
}

⑧ Sphereは無効にしておきます。
 

⑨ 最後に実行してみます。マウスを右クリックして球を発射して、キャラクタが倒れたら完成です。















ちなみに、RagdollとColliderの作る順番を間違えるとおかしくなるのでご注意を!



[OculusQuest] Quest / Go / Gear VR Build 8.0リリースノート

OculusQuestのバージョンが8に上がりました。
ちなみにバージョンが8に上がっていない状態で、Oculus Integration1.9で作られたアプリを実行しようとすると「アップデート中 アップデートが終了するまで、デバイスをオンにした状態でWi-Fiに接続し、電源を抜かないようにしてください」というメッセージが表示されます。
※このメッセージがでたら、おとなしく半日ぐらい放置しましょう。OculusQuestを被っているとアップデートされないようです。

バージョン8のリリースノートは以下の通りです。

https://forums.oculusvr.com/community/discussion/79863/quest-go-gear-vr-build-8-0-release-notes#latest
設定
  • ナイトモード用の設定パネルにオプションを追加しました。このオプションは、ヘッドセットのディスプレイを暖かい色に変更します。
守護者
  • Guardian設定メニューから既存のGuardianマップをすべてクリアできるようになりました。
    • これを行うには、設定パネルからGuardianを選択し、Guardianオプションの下部までスクロールして、[境界履歴のクリア]オプションの横にある[クリア]を選択します。
共有する
  • ギャラリーからFacebookでVR内のスクリーンショットを共有できるようになりました。
    • これを行うには、[共有]> [写真の共有]を選択し、共有する写真を選択し、視聴者を選択し、キャプションを追加して、[Facebookで共有]をクリックします。
ナイトモードというのが追加されましたので、夜やる人にはよさそうですね。





2019年8月27日火曜日

[OculusQuest][Unity] LoadSceneでアプリがクラッシュ(Oculus Integration1.39)

先日、Oculus Integration1.39がリリースされました。
それに伴い色々と変更されていますが致命的な不具合がありそうです、

https://forums.oculusvr.com/developer/discussion/79187/crash-on-unity-scene-load-of-sample-framework-oculus-v1-39

以下抜粋
私は自分のアプリでも同様の問題を抱えていましたが、最新のOculusパッケージバージョンに更新した後に限りました。1.38にダウングレードし、AndroidManifest.xmlを削除して再生成し(UnityのOculusメニューを使用)、<manifest>タグ内のAndroidManifestに次の行を追加することをお勧めします。 
<uses-feature android:name="android.hardware.vr.headtracking" android:version="1" android:required="true" />
Assets / Plugins / Androidにあります。

v1.39でLoadSceneを実行するとアプリが落ちます!
手が表示されなくなるとか他にも問題を抱えているので散々ですね・・・

v1.39にバージョンアップしてしまった方は、以下のリンクよりv1.38がダウンロードできるようです。
https://developer.oculus.com/downloads/package/unity-integration/1.38.0/

しばらくは様子見したほうがいいですね。

[OculusQuest][Unity] LocalAvatarWithGrabの手が表示されない問題を解決する方法2

Oculus Integration のバージョンが v1.39まで上がりました。
LocalAvatarWithGrabを使ってVRの操作をしていたのですが、
なぜか今まで使えていた手が表示されなくなりました・・・

表示されるようにするための手順を紹介したいと思います。

■解決策2:OvrAvatterSettingsを使う
仕様が変更となったようで、自分のAppIDを設定する必要がとなりました。
1.UnityEditorのメニューから「Oculus > Avatars > Edit Settings」を選択します。
 

 2.「Oculus Go/Quest or Gear VR」に APP IDを設定します。
 念のため「Oculus Rift App ID」にも同じIDを設定しておきましょう。
 

 App IDについては、こちらから設定するかテスト用のIDを使用してください。

3.Controller Shaderを設定する。
 これを設定しないと、手が高速でチカチカしてもっさりとした動作になるので必須です。設定されていないのは不具合でしょうか・・・

 ①LocalAvatarWithGrabの「Controller Shader」の右端にある〇をクリックします。
 

 ②一覧から「AvatarPBRV2Simple」を選択します。
 
  

以上で手が表示されるようになります。

この状態で、解決方法1を使用すると手が2重になってしまうのでご注意を。



[OculusQuest][Unity] LocalAvatarWithGrabの手が表示されない問題を解決する方法1

Oculus Integration のバージョンが v1.39まで上がりました。
LocalAvatarWithGrabを使ってVRの操作をしていたのですが、
なぜか今まで使えていた手が表示されなくなりました・・・

表示されるようにするための手順を紹介したいと思います。

■解決策1:CustomHandを使う
本筋とは違うかもしれませんが、CustomHandを使うことで表示できました。
以下手順です。

1. CustomHandをHierarchyに追加する
  CustomHandLeftとCustomHandRightをドラッグ&ドロップしてHierarchyに追加します。



2. CustomHandLeftを選択し、OVRGRabberの「Parent Transform」に「OVRCameraRig」をセットする




※CustomHandRightも同様の手順でセットします。

以上で手が表示されるようになります。

ただし、手順2の方が解決策としては良さそうです。


2019年8月26日月曜日

[OculusQuest]プレイ動画の撮影方法

OculusQuestのアプリのプレイ状況を録画する方法とPCへ保存するやり方を記載しておきます。

1. OculusQuestの録画
 OculusQuestのメニューの「シェア」から「録画」を選択します。
 これで録画が開始されます。
 ※キャプチャでは「録画中」となっていますが・・・
 逆に「録画中」を選択すれば、録画が終了します。 

2. PCへ取り込む
 普通にコピーしただけではだめなので、簡単なやり方としてはSideQuestを使います。

 ① files > Oqulus をクリックします

 ② 「VideoShots」をクリックします 
 ③ 録画したファイルをクリックします。ファイル目に日付と時間で名前がついているのでそれっぽいものを選びましょう。 

 ④ 「SELECT LOCATION」で保存先を選んで、「SAVE TO PC」で動画が保存されます。






[Unity] MMDモデルをfbxに変換してUnityで動かす(インポート編)

UnityでMMDモデルを動かす手段はありますが、fbxに変換して取り込んだ方が色々と都合が良いので、その手順を紹介します。
※Androidで表示されなくなることもないし

正し、ちゃんと規約は守って変換しましょう!

以下、手順です。

1.MMDモデルを用意する
 以下のサイトで探してみましょう。
 ・ニコニコ動画
 ・BowlRoll

 今回はこちらのコバトンを使わせてもらいます!
 https://www.nicovideo.jp/watch/sm29511523

2. Blenderをインストール
 以下の記事を参考にしてください。
 https://virtuarian.blogspot.com/2019/08/blender-blender-28.html
 
 今回の説明はver2.8を対象とします。

4.MMD用Blenderプラグインのインストール
 ① 以下のサイトからcats-blender-pluginをダウンロードします
 

 ② Blenderのプレファレンス画面よりアドオンを選択し、インストールをクリックします。
 ③ さきほどダウンロードしたzipファイルを選択して、「ファイルからアドオンをインストール」をクリックします。 

 ④ 一覧に「3D View Cats Blener Plugin」が追加されているので、チェックをして右上のバッテンで閉じます。
5.MMDモデルを読み込む
 ① 右上のほうにある「<」をクリックしてメニューを表示させます
 

 ② メニューから「CATS」をクリックします。
 ③ 「Import Model」をクリックします。
 ④ さきほどのMMDモデル(pmxファイル)を選んで、「Import Any Model」をクリックします。
 そうするとモデルが読み込まれて表示されます。
 
6.FBXに変換する
 ① 「Fix Model」をクリックします。

  注意点としては人型じゃないと、うまく修正できない場合があるのでエラーがでることがあります。
 ②右上の「シーンコレクション」からポーズ以外を選択します。
  Windowsの場合はShiftキーを押しながら選択です。
 ③「Export Model」をクリックします。

 ④ 左下の設定はキャプチャのようにします。
  保存先は、MMDモデルと同じ場所にしましょう。そうしないと、テクスチャなどがうまく反映されない場合があります。
  右上の「FBXをエクスポート」をクリックして完了です。
7.Unityへインポート
 ① さきほどのFBXとテクスチャ類をまとめてUnityのAsset下にドラッグ&ドロップします。 
 ② インポートしたFBXをシーンに張り付ければ完了です。



[Blender] Blender 2.8のインストール&日本語化

無償のモデリングソフトBlenderがver2.8となり、いろいろとインタフェースが変更となりましたので日本語化までの手順を紹介しようと思います。

1. Blenderをインストール
 以下のリンクより各自のOSに合わせたものをダウンロードしてインストールします。
 https://www.blender.org/download/
 
 今回の説明はver2.8を対象とします。

2. Blenderを起動、日本語化
 ① Edit > Preferences をクリック してプリファレンス画面を開きます

 ② 右下にあるLanguageをクリックします。
 
 
 ③一覧から「japanese(日本語)」を選択します。
 

 ④ interfaceのチェックを付けて日本語化完了です