テラシュールブログ

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

あけましておめでとうございます。

あけましておめでとうございます。

今年もテラシュールブログを宜しくお願いします。
 

m(_ _)m

 

去年はハーメルン小説家になろう、それとセブンナイツWarRobots(旧題WarkingWarRobots)にかなりの時間を割いてしまったので、今年はもう少しブログに時間を割きたい所。

(でもお薦めの小説とかあったら教えてくれると非常に嬉しいです)

 

去年読んだ、個人的に面白かった作品

昨年読んだ大体700作品の内、特に印象に残ってる作品

関連

去年の今頃

tsubakit1.hateblo.jp

【Unity】ハンドカメラ風カメラの挙動を実現するHandheldCamera

f:id:tsubaki_t1:20161231005920g:plain

飛行機の制御を作ったら、ハンドカメラ風のカメラ挙動が欲しくなります。で、StandardAssetsに含まれるCameraにソレっぽい挙動があったので、試しに使ってみます。

HandheldCamera

StandardAssets > Cameraでインポートしたアセット群にHandheldCameraなるPrefabが含まれます。
これがハンドカメラ風のカメラ挙動で、機能は

  • Targetに指定したGameObjectを追跡する
  • 手ブレ表現
  • 対象の移動先をある程度予測する
  • 距離に応じてズームする

という物です。

f:id:tsubaki_t1:20161231013943j:plain

HandHeldCamコンポーネント

HandHeldCameraプレハブに付いてるコンポーネントの一つは、HandHeldCamコンポーネントです。これは対象の追跡や手ブレ表現、予測等、カメラの向きを管理する処理を担当します。

f:id:tsubaki_t1:20161231010330j:plain

Targetは追跡するGameObjectを設定します。これが空の場合かつAutoTargetPlayerが設定されている場合、Playerタグを探してTargetに指定します。

Rotation Rangeは単純にカメラを回せる範囲。

Follow Speed少なければ少ないほど高速で追跡します。

Sway SpeedBase Sway Ammountは、手ブレの速度と範囲を指定します。Base Sway Ammountが多ければ多い程、手ブレで対象が画面外に行きます。

Tracking Sway AmountTrackingBiasが、(大雑把に)予想した対象の移動先を追うパラメータみたいです。

f:id:tsubaki_t1:20161231011608g:plain

Target Field Of View

TargetFieldOfViewは、対象に対してズームを行う機能みたいです。

f:id:tsubaki_t1:20161231013127j:plain

距離に応じてFOVを調整してくれるので、離れても大きさが極端に小さくなる事を回避してくれます。なお、追跡(ドリー)ではなくズームです。

tsubakit1.hateblo.jp

f:id:tsubaki_t1:20161231013050g:plain

Fovの調整は、Fov Adjust Time(速度)とZoom Amount Multiplier(ズーム)で行います。

Include Effects In Sizeはエフェクトを含めるかどうかです。これはStart時に初期化するので、Start時以降に変更しても効果がない項目です。

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

【Unity】サクっと飛行機の挙動を追加して飛び回る

今回は飛行機の挙動を追加してみます。

StandardAssetsの飛行機

Unity 5系からStandardAssetsに飛行機の挙動が追加されました。
事前に用意されているPrefabはレシプロ機とジェット機の二種類ですが、この二つの違いはパラメータなので、概ね同じ物と思っても良いです。

強いて言うなら操作法が若干異なります。

f:id:tsubaki_t1:20161230233221j:plain

http://cdn-ak.f.st-hatena.com/images/fotolife/t/tsubaki_t1/20150310/20150310212745.gif

今回はコレを使って、サクッと飛行機の挙動を追加してみようと思います。

サクッと飛行機の挙動を追加する

f:id:tsubaki_t1:20161230233031g:plain

まずはStandardAssetsのVehiclesをインポートして、飛行機全般の挙動をインポートします。
ついでにCarの挙動も付いてきますが、まぁうん。

f:id:tsubaki_t1:20161230233912j:plain

次にAssetStoreやら適当な所から飛行機のモデルを入手してインポート、モデルをシーンに配置します。
飛行機の場合は3D Model>Vehicles>Airで見つけられます。モデルによってはSpaceとかでも良いかもしれません。

インポートしたらドラッグ&ドロップでシーンに配置。

f:id:tsubaki_t1:20161230234211j:plain

f:id:tsubaki_t1:20161230234339j:plain

飛行機の親オブジェクトにAeroplane User Control 2Axisコンポーネントを追加します。

Aeroplane User Control 2Axisを追加すると、必要なコンポーネント(rigidbodyやaeroplane controller)が自動的に追加されます。

Aeroplane Controllerにエンジン出力や旋回性能等、色々とあります。

f:id:tsubaki_t1:20161230234714j:plain

後は、飛行機のサイズを大体30Mくらいに設定し、同程度のサイズのコライダーを設定します。コライダーは飛行機モデルにMeshColliderを付けConvex設定とかにしとけばOKです。

これを行わないと、飛行機に対してエンジン出力が高すぎる的な感じなのか、上手く動作しません。具体的にはロールやピッチの動作が変になります

小型機で行いたい場合は、Aeroplane Controllerのパラメータを調整します。

f:id:tsubaki_t1:20161230235314j:plain

操作を自分好みに変更する

この飛行機の挙動、操作が(無駄に)CrossPlatformInputManagerを使用していたり、物によってはマウス操作が必要だったりと若干面倒な所があるので、自分で操作出来るようにします。

基本的に動きはAeroplaneController.Move(ロール, ピッチ, ヨー, スロットル, エアブレーキ) で制御すれば良いだけなので、簡単に書き換える事が出来ます。

gist.github.com

モバイル向けにするなら、まぁCrossPlatformInputManager使ったままでも良いかと。

Aeroplane Controllerのパラメータ

  • MaxEnginePower
    エンジンの最大出力
  • Lift
    前進時に発生する揚力
  • ZeroLiftSpeed
    揚力が適応されない速度
  • RollEffect
    ロールの性能
  • PitchEffect
    ピッチの性能
  • YawEffect
    ヨーの性能
  • BankedTurnEffect
    banked turnの性能
  • AerodynamicEffect
    空気の影響度
  • AutoTurnPitch
    バンクターンしてない状態に戻す力
  • AutoRollLevel
    ロールしてない状態に戻す力
  • AutoPitchLevel
    ピッチしてない状態に戻す力
  • AirBrakesEffect
    エアブレーキがDragに与える影響
  • ThrottleChangeSpeed
    スロットルの変化する速度
  • DragIncreaseFactor
    速度がDragに与える影響

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

【Unity】スプライトの描画順制御を楽にするSortingGroup

昨日に引き続きUnity 5.6の新しい機能についてです。

スプライトの描画順制御

Unityのスプライトは、標準設定ならば*1、Sorting LayerとOrder In Layer、あとカメラから見たZ値で制御されます。

Sorting Layerが下の方が前面で、同一レイヤー内ならばOrder In Layerが高い方が前面に、Sorting Layerが同一かつOrder In Layerが同じなら手前にある方が前面に表示されます。

つまり、Sorting Layer > Order In Layer > Z値 です。

f:id:tsubaki_t1:20161228220659j:plain

この描画順を上手く制御すれば、キャラクターのように幾つかのパーツを組み合わせてキャラクターを作りボーンアニメーションで制御する事が出来ます。

ただ、描画順を考慮しないと若干面倒なことになります。

f:id:tsubaki_t1:20161228225810j:plain

f:id:tsubaki_t1:20161228221117j:plain

Order In Layerで制御した時の問題点

例えば下のようなキャラクターを作成します。

下のキャラクターは各パーツに分かれていて、振ってあるナンバーがOrder In Layerの番号です。
顔や肩・腰巻きは、体より手前にあるべきなので体(Order In Layer=0)より大きい値で、逆に腕や奥の足は体より奥に欲しいので、Order In Layerがマイナスの値を持っています。

f:id:tsubaki_t1:20161228221317j:plain

一見問題無いように見えますが、キャラクターを複数置いた場合に問題が発生します。

描画順的には体より前面に腕が描画されるので、下の図のように並べた際には他の人の体から腕が突き出る事になります。穿け、ハー状態です。もしくはクトゥルフ

f:id:tsubaki_t1:20161228221601j:plain

ちなみに、Sorting LayerではなくモデルとZ値で制御している場合、親オブジェクトのZ値をずらす事で問題が解決出来ます。それはソレで問題が無い訳ではないですが、まぁ何とかなると思います。

f:id:tsubaki_t1:20161228222100j:plain

SortingGroupで描画順を制御

Unity 5.6からスプライト描画系で便利なSorting Groupなるコンポーネントが追加されました。

これはSortingGroup以下のSpriteを、描画順番を維持したまま一つのSpriteのような形で描画順を制御するといった物みたいです。

例えば下のように、キャラクターを表現しているSprite群の親オブジェクトにSortingGroupをセットすると、SortingGroupの描画順を制御するだけで破綻なくスプライトが描画出来ています。f:id:tsubaki_t1:20161228222207g:plain

描画順が明確になるからか、FrameDebuggerで確認すると一括で描画されている事が分かります。SortingGroupの有りと無しを比較すると、パス数が明確に違います。

一応Z値で明確に描画順に差を付けた場合もSortingGroupと似たようになりますが、パーティクル等が割り込むと描画順が破綻するので、こういった表現を行いたい場合には、SortingGroupは少し嬉しい機能な気がします。

f:id:tsubaki_t1:20161228224054g:plain

f:id:tsubaki_t1:20161228224124g:plain

利用アセット

サンプルとして 2.5D 基本キャラクターパックのキャラクターを利用しています。こちらはメッシュベースで表現しているので、色々と良いです。個人的にこのシリーズはかなりお気に入り。

関連

Spineのような、ボーンベースの2Dアニメーション機能(Anima2D)が2017年の1月から無料で利用出来るようになる予定みたいです。(最終的にエディタに統合)

f:id:tsubaki_t1:20161228231812j:plain

f:id:tsubaki_t1:20161228231444g:plain

詳しくはUnite Europe 2016 - 2D Skeletal Animation for Unity: Anima2D で確認出来ますが、曰く、以下の機能が使えるとか何とか。

  • 2D ボーン制御
  • SpriteからMeshへの変換
  • スプライトメッシュエディター (SpriteMesh Editor)
  • 自動ウェイト (Automatic weights)
  • ウェイトエディター (Weight Editor)
  • インバースキネマティックス (IK)
  • ポーズの保存 / 読み込み
  • Unity のアトラスと互換
  • ボーンにアニメーションをベイク
  • オニオンスキン
  • アバターマスクの作成

blogs.unity3d.comSpine

tsubakit1.hateblo.jp

 
 

*1:5.6から画面下が手前で上が奥といった、特殊なソート方法が追加された