テラシュールブログ

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

【Unity】Unity 2017 beta が公開。個人的に気になった部分まとめ

Unity 2017のBeta版が公開されたみたいです。

 

Unity 5.6の次はUnity 2017

Unity 5.6の次のバージョンはUnity 2017になるみたいです。

インストーラーは何時ものUnity betaサイトから取得できます。

unity3d.com

幾つかRelease Noteで目についた機能

Timelineが着地

Timelineの機能が追加されました。

f:id:tsubaki_t1:20170412225759g:plain

APIはもうちょっと分かりやすくなってくれても良いのよ?

SpriteMask

Spriteのマスク機能が公開されました。

「マスクで穴を空ける」のと「マスクの部分だけ色を出す」の2種類が使えます。

f:id:tsubaki_t1:20170412230256g:plain

f:id:tsubaki_t1:20170412230537j:plain

SpriteのAtlas生成機能を一新

SpriteのAtlas生成が、従来のタグだけでなく「個別のSprite指定」や「指定フォルダ以下のSprite全部」みたいな指定が可能になりました。

既にパックしたTextureからSpriteを取り出してパックしたり、指定フォルダに投げ込んで一括パックみたいな事に期待出来そうです。

以前の動作もLegacyとして残ってました。

f:id:tsubaki_t1:20170412231151j:plain

Spriteベースのパーティクルアニメーション

パーティクルのアニメーションをSpriteで出来るようになりました。
同一Atlas内のスプライトでないと使えません。

f:id:tsubaki_t1:20170412231727j:plain

f:id:tsubaki_t1:20170412231714g:plain

.NET 4.6対応

.NET 4.6に対応したみたいです。

AndroidiOSでも使えます。


その前にStandaloneでIL2CPPさせて欲しい感はありますが。

f:id:tsubaki_t1:20170412225638j:plain

PlayableAPIのExperimentalが取れた

Playable APIのExperimental(実験的)が取れ、APIがまた変わりました。

現在は UnityEngine.Playables から取得出来ます。

PlayableAPIはやれば出来るのなはずです。

Scriptのみビルドするオプションが追加

スクリプトのみをビルドするモードが追加されたみたいです。

何故「リソースのみビルドするモード」が無いのかは謎ですが、多分AssetBundleで突っ込めって事なんでしょう。もしくは他に何かあるのか。

f:id:tsubaki_t1:20170412225538j:plain

テクスチャのラッピングモードがUVW独立

UV独立してラップ出来るようになりました。

f:id:tsubaki_t1:20170412225500j:plain

f:id:tsubaki_t1:20170412232539j:plain

IL2CPPのビルドサイズが小さく、構築が早く?

IL2CPPの構築サイズが小さくなるっぽいです(未検証)

またMacでのIL2CPPへの変換効率が倍になるみたいです(未検証)

Build Pipeline: Unified assembly stripping code used for IL2CPP and Mono builds - which should result in more consistent behaviour between IL2CPP and Mono and in smaller build sizes for platforms supporting assembly stripping on Mono.

 IL2CPP: Improved IL2CPP code conversion time on OSX. Conversion times may improve by as much as 2x.

FBX SDK のバージョンが 2016.1.2 に

バージョンが上がったみたいです。

Asset Import: Upgraded FBX SDK to 2016.1.2

その他気になった所

Consoleについた接続先

Consoleに接続先が付きました。

f:id:tsubaki_t1:20170413004821j:plain

ProfilerにUIの項目

UIのProfilerが出ました。

OverdrawやCanvas数、その他色々と確認出来ます。また、各フレームの描画内容が確認出来ます。

f:id:tsubaki_t1:20170413005143j:plain

コンポーネントの割り込み追加

割り込めるようになりました。

一々AddComponentまで持ってかなくても良いのは楽です。

f:id:tsubaki_t1:20170413005500g:plain

最初からForce Text

実際殆どの環境でBinaryは使ってなかったので、最初からテキストは正しい選択のように思います。*1

f:id:tsubaki_t1:20170413005823j:plain

Distance Shadow maskの項目がQualityへ

LightからQualityへ移動しました。無くてビビりました

f:id:tsubaki_t1:20170413010559j:plain

Resolution Scaling fixed DPI factorという項目

うん、あとで確認(予定は未定

f:id:tsubaki_t1:20170413011804j:plain

感想

中々面白いといえば面白そうな物があります。

今度もう少し色々と見てみます。

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

*1:最初からしとけよっペッ

【Unity】物理シェーダーベースのパーティクル向けシェーダー、Standard Particle Shader

f:id:tsubaki_t1:20170410012013j:plain

物理ベースシェーダー的なパーティクルエフェクトが作られたみたいです。

Standard Particle Shader

Standard Particle Shaderは、PBRベースなパーティクルシェーダーみたいです。

通常のStandard Shaderよりライティング周りを簡略化した代わりにパフォーマンスを得る感じなんじゃないかなと。

 

 

ソレ以外にも、幾つかパーティクルシステムに便利なオプションがあるみたいです。

  • アニメーションのテクスチャブレンディング
  • 照明のON/OFF
  • Depth Bufferによるフェード
  • Cameraによるフェード(カメラ距離によりフェード)
  • 屈折効果*1
  • 使用パラメータに基づいてVertex Streamsを自動設定

例えば下のテクスチャアニメーションのフレーム補間はアニメーションのテクスチャブレンディングの効果です。

特に時間をゆっくりにした時や、パーティクルに使用するテクスチャの枚数を制限したい場合に有効に見えます。

 Depth Bufferのフェードはこんな感じです。

f:id:tsubaki_t1:20170410015755j:plain

Camera Fadeはこんな感じです。
要するに近づくと消えます。

f:id:tsubaki_t1:20170410020105g:plain

 

また他のシェーダーから見ると

  • StandardShaderにあるMetaricやSmoothness のパラメータが使える
  • パーティクルモジュールで指定した色が使える(頂点カラーが使える)
  • 不透明(Opaque)の他にも、FadeやTransparent、Aditive、Overlay等色々と使えるみたいです。
  • 動作するのは Unity 5.6 f2 からです

f:id:tsubaki_t1:20170410015450j:plain

Standard Shaderと同じようにUber Shaderみたいです。

フィードバックはこちら。

Particle System Previews

使用してみる

インポート

Unity2017.3以降は標準搭載っぽいです

公開サイト( [Release] Standard Particle Shader )よりダウンロードします。

現在はフォーラムより入手する感じですが、今後は変わるかもしれません。例えばStandard Shaderに入って手軽に使えるようになったり、AssetStoreに入って面倒くさく余計な手間が増える等。

f:id:tsubaki_t1:20170410013308j:plain

解凍後はプロジェクトにインポートします。

なお4/9現在のバージョンでは、インポート時に10分ほどUnityエディターが停止します。その内復帰しますが、インポート中は反応が無くなるので、その辺り注意です。

f:id:tsubaki_t1:20170410025547j:plain

マテリアルに適応

インポートしたらマテリアルに適応します。

f:id:tsubaki_t1:20170410020216j:plain

適応した物はParticleのRendererに設定です。

f:id:tsubaki_t1:20170410020308j:plain

 

設定する

使用は、使うシェーダーのパラメータを設定するだけです

設定後、設定画面下にある「 Apply to Streamsボタン」を押すと、パーティクルに流し込むShader Stream設定項目が更新されます。

例えばLightingを使わないならNormalが削除される等。

f:id:tsubaki_t1:20170410020637j:plain

f:id:tsubaki_t1:20170410020732j:plain

 

例えばアニメーションのテクスチャブレンディングを行おうと思ったら、Flip Book ModeをSimpleからBlendへ変更して、Apply To Streamに変更すれば、ブレンドしてくれます。

NormalMapやEmissionが使用出来る他、ModelにVertexの色を指定出来るのは中々に良いです。

f:id:tsubaki_t1:20170410025210j:plain

 感想

インポートで10分エディタが固まったのにはビビリましたが、好きかも

 

関連

tsubakit1.hateblo.jp

もう使わなくても良くなるハズ

tsubakit1.hateblo.jp

*1:効いてないように見える

【Unity】Timelineでフェードイン・フェードアウトするTimeline Clipを用意する

f:id:tsubaki_t1:20170406205302g:plain

とある事情で作ったTimeline用のフェードイン・フェードアウト Playableです。

これぐらい最初から用意してくれてもバチは当たらないと思いますが、まぁ。

 

※Unity 2017b5で実装が大幅に変わった為、動作しません。
 新しい実装に修正中

 

使い方

まず、フェードを動作させるためにカメラより最前面に表示される、画面いっぱいに表示されるUIを用意します。

具体的には、ScreenSpace-OverlayのCanvasにImageを設定すれば、そのImageはCameraレンダリング完了後に描画されます。

SortOrderは999とかしとけば、ScreenSpace-OverlayのCanvas内でも多分最前面です。

f:id:tsubaki_t1:20170406205455j:plain

次に下のコードをプロジェクトに入れます。

 

gist.github.com

後はTimelineの設定です。

TimelineにFade Trackを追加

f:id:tsubaki_t1:20170406210302j:plain

追加したトラックのImageを設定する項目に、先ほど作成した最前面に描画されるImageを設定

f:id:tsubaki_t1:20170406210327j:plain

Add Fadeout Clipでクリップを2つ追加。

TypeにFadeIn、FadeOutを設定

f:id:tsubaki_t1:20170406210359j:plain

これでタイムラインに沿ってフェードしてくれます。

トラックの長さを変えるとフェードにかかる時間が伸びます。

f:id:tsubaki_t1:20170406210630g:plain

コードの説明

少しだけコードの説明です。
とは言え、正直Timelineの次のバージョンで変わる可能性があるというか是非とも変わって欲しいと言いますか。

 

まずはトラックの定義です。

TrackAssetクラスを継承している物を指します。ここで中身はあまり意味が無く、重要なのはAttributeの二つです。

  • TrackClipTypeでTrackに載せるPlayableAssetの型を指定
  • Track Binding Typeでバインドする型を指定

ちなみに、態々こんなものを用意させている割にTrackにTrackClipTypeは一つしか登録出来ません。なんでさ

f:id:tsubaki_t1:20170406210825j:plain

バインドする型とは、要するにコレです。

f:id:tsubaki_t1:20170406211028j:plain

 

次にPlayable Asset、シーケンスです。シーケンスは要するにコレです。

f:id:tsubaki_t1:20170406213811j:plain

シーケンス毎のパラメータを保持したい場合はココに書きます。今回はシーンを参照する何かがあるわけでは無いので、Resolverは必要ないです。

f:id:tsubaki_t1:20170406211137j:plain

 

最後にシーケンス中の動きです。

ここで注目すべきはplayerDataをImageにキャストしてる事です。ココでTrackで指定したImageが取れます。というか、ここでしか取れません。なんでさ

タチが悪い事にProcessFrameが呼ばれるのはOnGraphStartやOnPlayStateChangedより後なので、シーケンス起動時やステートが選択された瞬間に初期化が出来ません。設計ミスじゃないのか。

流石に違う手法がありそうな気がしますが、今のところ分かっていません。

 

後はHandle.time / handle.durationで、進行中のPlayableの時間を0~1で取れます。

f:id:tsubaki_t1:20170406211305j:plain

上手く応用すればTween等にも使えるんじゃないかなと思わなくもないです。

感想

もうちょっと、TrackとPlayableAssetのやり取りをシンプルに出来たら良いんですけどね。まぁベータという事で。

あと、もう少し単純な物を事前に用意してくれてもバチは当たらんと思うのですよ。具体的にはTweenとかTweenとかTweenとか。あとTween。

 

あと名前がゴチャゴチャしてますが、お察しください。

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

【Unity】Spriteで9 Sliceを使う

f:id:tsubaki_t1:20170405210606j:plain

今回はUnity 5.6から可能になったSpriteでの9 Sliceについて紹介します。

Unity 5.6から搭載された 9 Slice(スプライト向け)

Spriteで表現しているスプライトのスケールを引き伸ばした場合、通常では下のように指定軸に引き伸ばされていました。

このため、ピクセルと一致するような連続したスプライトを表現したい場合下のような手法が必要でした。

  • 大量のスプライトを並べる
  • TextureをRepeatに設定し、UV値のTilingを小さくする

f:id:tsubaki_t1:20170405211607j:plain

f:id:tsubaki_t1:20170405212147j:plain

 

で今回Unity 5.6にやっと搭載された9 Sliceで、そういった手法からはある程度オサラバ出来るようになりましたヤッター。
下のアニメのようにスケールを変更しても、絵が引き伸ばされるような事はありません

f:id:tsubaki_t1:20170405211128g:plain

また、SpritePackerも使えます。

そのため「TextureをRepeatに設定し、UV値のTilingを小さくする」手法と比較してバッチングが効きやすいのも魅力的です。

f:id:tsubaki_t1:20170405224758j:plain

9 Sliceって?

tsubakit1.hateblo.jp

 

9 Sliceを使ってみる

スプライトの用意

今回搭載された9Sliceは、uGUIの9Sliceで使用していたような設定をそのまま使用します。

  1. SpriteEditorを開く
  2. 緑枠の範囲を繰り返したい範囲に設定
  3. Applyする

f:id:tsubaki_t1:20170405214823j:plain

なお、Tileを使用するSpriteのMeshTypeは、FullRectが良いそうです。

Sprite Tiling might not appear correctly because the Sprite used is not generated with Full Rect. To fix this, change the mesh type in the sprite's import settings to Full Rect

f:id:tsubaki_t1:20170405215833j:plain

タイリング(Tiled)

実際にタイルで表現してみます。

やることは簡単で、Draw ModeをTiledに設定するだけです。

これでスプライトを操作するモードf:id:tsubaki_t1:20170405220330j:plainでスプライトを動かすと、スプライトの表示を繰り返してくれます。

f:id:tsubaki_t1:20170405220235j:plain

f:id:tsubaki_t1:20170405215514g:plain

このモードになると、Scaleとは別にSize(Wideth、Height)が付きます。
TransformのScaleは単純な大きさ、WidethとHeightは高さと幅といった使い分けになるみたいです。

TiledのTile Mode

f:id:tsubaki_t1:20170405220742j:plain

Tile Modeは少し面白いです。

TileModeがContinuousだとスプライトは綺麗にタイル表現されますが、Adaptiveだと綺麗に本数が増えます。

f:id:tsubaki_t1:20170405220550g:plain

f:id:tsubaki_t1:20170405220834g:plain

TiledとSlicedの違い

DrawModeの設定にはTiledとSlicedの2種類があります。この中身は、中身を繰り返すかどうかです。

試しに下のようなスライトの挙動をわ~や~フレームも一緒に比較してみます。

f:id:tsubaki_t1:20170405221335j:plain

Slicedは四隅は固定していますが、上下左右中央を引き伸ばしています。

f:id:tsubaki_t1:20170405221552j:plain

Tiledは四隅は固定されていますが中身を繰り返しています。

f:id:tsubaki_t1:20170405221515j:plain

Colliderの大きさをあわせる

BoxCollider2D等はオブジェクトのScaleを見て初期値を判定しているのか、WidthとHeightで引き伸ばしたSpriteに使用すると大きさが一致しません。

これはAuto Tilingにチェックを入れると一致するみたいです。

f:id:tsubaki_t1:20170406082645j:plain

注意点

FullRectが使用される

Spriteの9Slice版の機能は、ポリゴンを繰り返す訳では無いみたいです。その為、Spriteと比較してフィルレート的な部分が無駄になるかもしれません。

f:id:tsubaki_t1:20170405223126j:plain

また5.6f3ではSingle SpriteのFull Rectでは無駄な領域を作ってしまうので、無駄なアルファ部分がある場合はMulti Spriteにして無駄な部分を刈り取った方が良さそうです。

f:id:tsubaki_t1:20170405222638j:plain

f:id:tsubaki_t1:20170405222647j:plain

長さに限界がある

残念ながら長さに限界があります。

あまりに長い(繰り返しの多い・ポリゴンの多い 多分6万頂点ぐらい)スプライトになると、下のようなエラーが出ます。

Cannot generate 9 slice most likely because the size is too big.

 UV Scrollは出来ない

ポリゴンのリピートの為、UV Scrollは出来ません。

いや、なんとか出来そうな気がしなくも…?

アニメーションは動くが使用するスプライトの大きさは固定にすべき

アニメーションはTiledの状態でも動きますが、アニメーションに使用するSpriteのサイズを固定にしないと変な動作になります。

 

感想

2Dプラットフォームゲーム(横スクロールアクション)を作る時とかには便利そうですね。タイルマップの次に欲しかったです。

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp