セールで日本刀を購入してテンションが上がったので、日本刀でいろいろやってみたいと思います。
※この記事は、Unity公式が開催している「Unityアセット冬のアドベントカレンダー 2019 Winter」の25日目の記事です。
最終的にはこのような感じです。
#VR 日本刀(勢州桑名住村正)で派手なエフェクト出しながらリンゴを切ってみたやつ。明日投稿のアドカレ用 #unity #occulus pic.twitter.com/67X3krzoe5
— すし🦙 (@mamesiva64) 2019年12月24日
開発環境
Unity 2019.2.16f
Windows10 Pro
OculusRift CV1
武器を選ぶ
今回の日本刀はこちらの国宝級含む10本セット。
日本のパブリッシャー様です。
クオリティがとても高く、普段見えない所も作りこまれています。
↓ポストエフェクトなしでこのクオリティ
太刀:
・三日月宗近(国宝)[tachi01]
・江雪左文字(国宝)[tachi02]
・獅子王[tachi00]
打刀/脇差:
・歌仙兼定[katana00]
・石田正宗[katana01]
・勢州桑名住村正[katana02]
・骨喰藤四郎[katana03]
短刀:
・謙信景光(国宝)[tantou00]
・物吉貞宗[tantou01]
大太刀:
・太郎太刀[ootachi00]
VR化する
綺麗な刀をVRで振り回してみました
VR内でも美しい……
使用アセット(VRコントローラ/ 背景)
Unityは、設定をするだけで実行時にVR空間で動作します。
Project SettingsのXR Setingsを設定、今回はOculusなのでOculus追加。
コントローラを使うにはAsset使ったほうが簡単です。
アセットは、各コントローラのモデルが利用できます。
コントローラは、以下を参考にさせて頂きました。
OVRCameraRigを配置して、RightControllerAnchorの子に刀を設置するだけ
エフェクト(軌跡)をつける
刀といえば軌跡エフェクト。
使用アセット
X-WeaponTrail を利用しました。
X-WeaponTrailを配置し、
EndPoint ... 剣先(青球)
StartPoint ... 剣元(赤球)
を指定するだけ。
X-WeaponTrailのパラメータで、更新フレーム数や色、シェーダーが変更できます。
エフェクト(パーティクル)も試してみる
軌跡以外のパーティクルなエフェクトもかっこいいです。
VRでエフェクトを置くとどうなるのか試してみました。
今の所ポストエフェクトがかかっていないのでブルームが足りずやや地味ですが、VRでは迫力あります。
使用アセット
斬撃系に特化したパーティクルエフェクト。
今回はとりあえずボタンを押すとprefab配置するようにしただけです。
移動ベクトルの変動を見て自動的に出したい。
果物を斬る(メッシュカッター)
刀なので物を斬りたい。リンゴを斬ってみました。
使用アセット
安価なメッシュカッターアセットです。
スクリプトが少し必要です。
使い方
注意:Unity 2018.3以降だと古いPostEffectがありエラーが出ました。
Assets\SimpleMeshCutter\Demo\PostProcessing\Editor\PropertyDrawers\MinDrawer.cs(6,34): error CS0104: 'MinAttribute' is an ambiguous reference between 'UnityEngine.PostProcessing.MinAttribute' and 'UnityEngine.MinAttribute'
回避策はありますが、切断するのにPostEffectは必要ないので削除して問題ありません。
手順
1. 切断する側にCutterをセット
2. 切断される側にCutterTargetをセット。切断面のマテリアルを設定できます。
3. CutterのCutメソッドを呼び出すと、Cutterの向きでCutterTargetを切断できます。
4. 切断後は、Cutter.OnCutted に追加されたメソッドが呼び出されます。
_cutter.OnCutted += OnCuttedHandler;
ちょっとわかりにくい?
Assets/SimpleMeshCutter/Demo/Scenes/MeshCutSample と CutterTest.cs が参考になります。
VRの刀では、
- 刀にCutterとCollider、果物にCutterTargetとCollisionとRigidbodyを追加。
- OnTriggerEnterで、果物に対してCutメソッドを呼び出し
- 切断後コールバック関数(OnCuttedHandler)では、それぞれのオブジェクトにRigidbodyをAddComponentしています。(切断後のメッシュオブジェクトは新規で作られるのでRigidbodyが無い)
という実装方法を行いました。
切断後のオブジェクトにCutterTargetをAddComponentすると無限に切断できます。
以上です。
ゲームを作ろうと思っていたのですが時間が捻出できませんでした。
そのうち作りたいです。(OculusQuestが届かない><)
おまけ:アセットまとめ
武器
クオリティ高い刀をあつめました。脇差単体なら無料
背景
スケールがちょっと小さいような気がするので、畳の幅を90cm前後として考て1.8倍ぐらいに拡大して使いました。
軌跡
背景ゆがみエフェクトもできます。
3D斬撃エフェクト
2Dゲーム向きの斬撃・打撃エフェクト
今回利用していませんが、2D向けの斬りや打撃のエフェクトです。スプライトアニメよりも派手になります。
メッシュカッター
スクリプトが必要ですがローコストでメッシュ切断導入できました。
果物
VRならローポリが優しいですね。
何か斬る関連のアセットがあったら追加していきます。
ありがとうございました。