テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】ユニティちゃん等で、ジャンプ中に追加で上下してしまう問題の解決方法

f:id:tsubaki_t1:20171103225451j:plain

今回は上下の動きが最初から含まれているジャンプモーションをアクションゲーム等で使用する方法についてです。

ジャンプ中にジャンプモーションがジャンプする

ユニティちゃんのようなキャラクターをアクションゲーム等で使用していると、キャラクターのジャンプ中にもう一度ジャンプしてしまう…という事があります。

f:id:tsubaki_t1:20171103224802g:plain

例えば上のGifアニメのケースです。

 

右が通常のジャンプ、中央がジャンプモーションです。各々はそれ程問題が無いのですが、二つ合わせてしようすると左のジャンプモーションのように、ジャンプ中にもう一段ジャンプする問題が発生します。

 

ジャンプアニメーションから上下移動を取り除く

この問題は、ジャンプモーション中に「ジャンプの上下」が含まれている事が問題です。その為、カプセルのジャンプに追加してジャンプモーションの上下も入ってしまう為、追加で上下してしまう訳です。

f:id:tsubaki_t1:20171103235623g:plain

これはアドベンチャーゲームRPGといったジャンルのゲームでMatch Targetを駆使して移動するならば非常に綺麗に動いてくれて良いのですが、プラットフォーマー(横スクロールアクション)や3Dアクションではジャンプの位置をズラす要因になります。

tsubakit1.hateblo.jp

この問題を手っ取り早く解決する方法は、ジャンプアニメーションから上下移動しなくする事です。

手順

この操作はアニメーションのImporter設定を操作して、キャラクターの移動部分を無効化することで実現します。

 

やることは概ね4つ。

  • AnimatorのApply Root Motoinのチェックを外す
  • アニメーションのImporterの、Bake Transform Position(Y)を外す
  • Based UponをCenter Of Massに設定して、モーションの中心位置をモデル中央に設定。
  • Offsetでモデルの位置を調整

f:id:tsubaki_t1:20171103233812j:plain

これでアニメーションを再生した時、キャラクターが上下せずアニメーションが再生されたら成功です。

f:id:tsubaki_t1:20171103233739g:plain

実際の動作

このモーションをジャンプの動きに合わせて動かすと、カプセルにジャンプをさせた場合でも綺麗にジャンプモーションを再生してくれます。

f:id:tsubaki_t1:20171103235116g:plain

着地時に足がめり込む

もし「踏み込み」と「着地」のモーションをジャンプモーションの流れに組み込みたい場合、そういった「足が付いている」部分は別モーションとして切り出して制御するのが良いかもしれません。

Based UponがFootの場合は、モーションの中心点が足になります。

ジャンプ動作が分割されていない場合

分割します。

tsubakit1.hateblo.jp

【Unity】UnityScriptをC#に変換する unityscript2csharp

f:id:tsubaki_t1:20171031221526j:plain

2017系でレガシー判定のUnity Script(Java Script)をC#に変換するプロジェクトについてです。

Unity Scriptは死んだ!何故だ!

かつてUnityのチュートリアルやサンプルプロジェクトで使用していたUnity Script(通称Java Script)ですが、Unity 2017.1系にてついにリストラとなりました。

現在も一応使用することが出来ますが、Legacy扱いになっています。

tsubakit1.hateblo.jp

Unity ScriptをC#に変換する

Unity Scriptは死にましたが、ソースコードを活用するアセットが同時に公開されていました。このプロジェクトを使用すると、Unity Scriptで作成したソースコードC#に変換する事が出来ます。

github.com

これは現状コマンドラインで実行するタイプの物みたいです。

コマンドラインはこんな感じです。

-u エディター(フォルダ)のパス

-p プロジェクトへのパス

-r スクリプトが参照するアセンブリ

-s カスタムシンボル

UnityScript2CSharp.exe -p m:\Work\Repo\4-0_AngryBots -u M:\Work\Repo\unity\build -r "m:\AngryBot Assemblies\Assembly-CSharp.dll" "m:\AngryBot Assemblies\Assembly-UnityScript.dll" -s UNITY_ANDROID,UNITY_EDITOR

f:id:tsubaki_t1:20171031222830j:plain

コマンドラインの無いエディター拡張版も準備しているみたいですが…

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

【Unity】ProBuilder Basicでコーネルボックスを作ってみる

f:id:tsubaki_t1:20171025214853j:plain

ProBuilder

f:id:tsubaki_t1:20171025215316j:plain

旧Prototype、現ProBuilderという無料のアセットを使用すると、簡単なモデリングが出来るみたいです。

www.youtube.com
この機能で簡単なレベルを作成する練習がてら、コーネルボックスを作成してみます。

コーネルボックスを作ろう

コーネルボックスを作ってみます。

 

tsubakit1.hateblo.jp

Cubeを作成する

とりあえず10x10x10のCubeを作成します。

f:id:tsubaki_t1:20171025215618j:plain

f:id:tsubaki_t1:20171025215358g:plain

Cubeの色を変えよう

Cubeの色を変更します。Pro Builderは頂点カラーで色が指定出来るので、面を選択、色を指定します。

f:id:tsubaki_t1:20171025215723g:plain

ノーマルを反転しよう

ノーマル反転して、面を内面に向けます。

f:id:tsubaki_t1:20171025215937j:plain

f:id:tsubaki_t1:20171025215821g:plain

ライトを配置しよう

右下のライトベイクが完了したら、ライトをCubeの中に配置します。

Indirect Multipleを高めに設定すると、コーネルボックスらしい間接光溢れる感じになります。

f:id:tsubaki_t1:20171025220020g:plain

内側のCubeを配置しよう

例通り、内側のCubeを二つ配置してみます。

新しくモデルを作っても良いのですが、今回はメッシュを押し出してCubeを配置してみます。

f:id:tsubaki_t1:20171025220159g:plain

完成

後は色々と調整したら完成です。(作り直した)

f:id:tsubaki_t1:20171025220433j:plain

f:id:tsubaki_t1:20171025220541j:plain

中々に面白いです。

参考

gomafrontier.com

qiita.com

【Unity】CinemachineのFreeLook Cameraが楽しい

f:id:tsubaki_t1:20171023202338g:plain

今回はCinemachineのFreeLook Cameraを使ってみます。

CinemachineのFreeLook Camera

カメラの動きを制御するCinemachineのアセットには、FreeLook Cameraなるカメラを自由に操作出来る系の機能があります。

この機能では、昨今の三人称視点ゲームで良くあるようなカメラの位置を自由に上下左右出来る…という機能みたいです。

 

Cinemachineなので、既存のカメラとのブレンドも出来て、割と良い感じです。

f:id:tsubaki_t1:20171023213014g:plain

見上げる時は視界を狭く、見下ろす時は視界を広く

この機能の面白い所は、視点の位置によってカメラの動きをある程度調整できる点です。調整できる項目は、視点の先や位置、それとFOVが調整出来ます。

 

 

例えば下から眺める時はキャラクターの近くに持っていき、上から見下ろす時は視界を広く持つ…といった感じです。

f:id:tsubaki_t1:20171023204239g:plain

使ってみる

CinemachineのCreateFreeLookCameraでFree Look Cameraを作成します。

f:id:tsubaki_t1:20171023204752j:plain

作成したカメラ(多分CM FreeLook1)のFollowとLookAtを設定します。

Followはキャラクターを動かした時に追跡してもらう為の設定。出来ればキャラクターのルートのGameObjectがオススメです。

LookAtはカメラが見つめる対象を指定します。こちらは足元を設定すると足元を眺めてしまうので、頭を指定しておくのが良いんじゃないかなと。

f:id:tsubaki_t1:20171023205147j:plain

後はカメラの向きと半径の大きさを指定します。

図では見難いですが、CinemachineのFreeLookCameraには3本の輪が設定されています。この範囲がキャラクターのカメラの動く範囲です。

それぞれ上から順にTop Rig、Middle Rig、Bottom Rigのパラメータが対応しており、この値を設定することで、カメラが見下ろしている時や見上げている時のキャラクターとの距離や、FOV等が設定できます。

f:id:tsubaki_t1:20171023205239j:plain

個人的にはTopRigは少し高めでRadiusを多めに、Middleは割と広めに、BottomRigは狭く…といった感じにすると気持ちのよい操作になるかな…と。

f:id:tsubaki_t1:20171023205739g:plain

コントローラーを反転させたい

素晴らしいカメラ操作だ素晴らしい…と言いたいですが、このFreeLook Camera、自分の何時も使ってる操作と逆の操作になるので、非常にストレスフルです。

残念ながらコレを解決するオプションはFreeLookCameraには無いのですが、解決する方法が有志により公開されていました。

f:id:tsubaki_t1:20171023212541g:plain

要するにコントローラーの動きをオーバーライドすれば良いみたいです。

gist.github.com

https://forum.unity.com/threads/overriding-freecamera-cinemachine-inputs-or-freecamera-axis-inversion.484819/

関連

blog.applibot.co.jp

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp