テラシュールブログ

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

そして7日後、SNSは再開された

最近、SNSをチェックする頻度が3~4年前と比較して明らかに増えてる。チェックする情報の範囲も頻度も以前と比べられないくらいの量、これは所謂SNS中毒という奴に違いない。

news.livedoor.com

折角の休みなので、SNSやブログ等を止めてみるが、これが中々に難しい。
「何をするにしてもスマホやPC等のSNSに接続するデバイスを使う」かつ「定期的に通知が来るので、ついチェックしてしまう」という問題。

そして何より、スマホが気づくとSNSを開いている。まるでキング・クリムゾン

 

ではスマホを止めてしまえば良いと思うが、これも中々に難しい。何せ自分の情報インフラは大半がスマホやPCといったインターネットから来る。

書籍は既に殆どを(ラーメン大好き小泉さんを除き)Kindleで購入しているし、ブラウザは簡単にSNSに接続できる。最早PCはインフラだ。

なんという事だ、既に包囲網は完成していたのだ。

 

しかし何とかせねばならない。何か対策はないか?よろしい、ならば我慢だ。

我慢は筋肉の次ぐらいに強力だ。
筋肉は全ての問題を解決するが、我慢は大抵の問題を解決する。

通知が来ても我慢、みたい情報があっても我慢。定期的にチェックする項目があっても我慢。見よこの完璧なソリューション。

 

そして今、7日間の我慢の時を超え、ガマンはついに解き放たれる。開放の時だ!

流れるようにTwitterを開き、通知を確認し、何時ものタグを打ち検索、Facebookで動向を確かめ、FacebookのUnityユーザー助け合い所を確認し、SlackやRedditを眺める。

 

あれだ、ガマンは大抵の問題を解決するが、筋肉と違って体に良くない。*1

*1:筋肉で問題を解決したら社会的に死ぬ

【Unity】Position as UV1…とは

f:id:tsubaki_t1:20170810212027j:plain

少し話題に登ったので、書いておきます。書かないと忘れる

Position as UV1とは何ぞや

f:id:tsubaki_t1:20170810212235j:plain

Position as UV1というコンポーネントがあります。この謎コンポーネントは太古の昔(UIが作られたUnity 4.6系)から存在し、我々を見守ってきました。

 

で、コレは要するに何かとマニュアルを見てみますが、今ひとつ要領を得ません。

(原文)This adds a simple Position as UV1 effect to text and image graphics.

(訳)Text や Image グラフィックにシンプルな Position as UV1 エフェクトを付加します。

Position as UV1は、UIに頂点情報を流し込むコンポーネント

で、Position as UV1とは何ぞやと言えば、要するにUIにUV1の情報を流し込むモノです。これに対応するシェーダーを使用すると、UVのサイズとは別に模様を使用したり出来ます。

例えば下のようなレイアウトのUIがあります。二つのUIがあり、大きさが異なります。このUIに一定間隔で穴を開けようと思います。

f:id:tsubaki_t1:20170810214409j:plain

これにUV0で穴を開けようと思った場合、大きさが異なるので穴の大きさも異なってしまいます。

f:id:tsubaki_t1:20170810214520j:plain

これをPosition as UV1を利用して模様を付けると、UIの大きさに関わらず一定の大きさ・間隔で穴を空けてくれる訳です。

f:id:tsubaki_t1:20170810214622j:plain

動かしてみると分かりやすいかもしれません。

f:id:tsubaki_t1:20170810214826g:plain

実際にやってみる

CanvasのAdd Shader ChannelでTexcoord1を追加します。

f:id:tsubaki_t1:20170810215140j:plain

シェーダーを用意して、Materialに設定します(今回はUV1Sample)

gist.github.com

f:id:tsubaki_t1:20170810215639j:plain

後はマテリアルをUIに登録して、Position as UV1を追加します。

f:id:tsubaki_t1:20170810215842j:plain

 

で、何の役に立つの?

知らん、そんな事は俺の管轄外だ

 

関連

実装

Unity-Technologies / UI / source / UnityEngine.UI / UI / Core / VertexModifiers / PositionAsUV1.cs — Bitbucket

【Unity】AnimationControllerからTimelineへのアニメーション切替を目立たなくする

今回はTimelineを再生する際に、アニメーションの切替が一瞬で切り替わってしまう問題の対策についてです。

Timelineを使用するとアニメーションが一瞬で切り替わってしまう

Timelineをキャラクターに流し込んだ際、キャラクターのアニメーションがバツっと一瞬で切り替わってしまう事があります。

例えばダッシュモーション(AnimationController)からジャンプ(timeline)に切り替えると、こんな感じで動作します。アニメーションの切替がいきなり行われてるのが分かります。

f:id:tsubaki_t1:20170810075652g:plain

Timelineの入りと出でフェードする

この問題を解決するには、Timelineの最初のクリップにEase In Duration、最後のクリップにEase Out Durationを設定します。

この時間でAnimationControllerとTimelineでフェードを行います。

f:id:tsubaki_t1:20170810075912j:plain

f:id:tsubaki_t1:20170810075929j:plain

f:id:tsubaki_t1:20170810075444g:plain

 

これなら、ちょっとしたアニメーションの再生(例えばRPG戦闘シーンでのスキル発動や、特定ギミックの発動、死亡アニメーション等々)はTimelineで流し込むといった事ができそうです。

【Unity】動作が完結してるアニメーションを分割する

例えばジャンプアニメーション等、AssetStoreから入手したアセットのアニメーションが繋がっている事があります。

そういった時に、アニメーションを分割するアプローチについてです。

繋がっているアニメーション

ジャンプ等のアニメーションは、繋がっていない場合と繋がっている場合があります。これは単純に用途の問題で、

  • 繋がっている場合:MatchTarget等で段差を飛び越える等の、固定で動く移動
  • 分かれている場合:ジャンプモーション等に使用する

といった感じでしょう。

f:id:tsubaki_t1:20170807233650g:plain

固定移動の場合は繋がっている方が、シーケンスの制御が楽で良いのですが、ジャンプ中といった場合はそうはなりません。
オブジェクトの晒されている状況に応じて適当なアニメーションを割り当てる必要があります。
例えばジャンプアニメーションの流れは下のようなモノになると思いますが、

  1. ジャンプ開始
  2. ジャンプ上昇中
  3. ジャンプ中
  4. ジャンプ下降中
  5. 着地

アクションゲームではジャンプ開始は固定でも、ジャンプ上昇時間やジャンプ下降時間は可変である事が予想されます。

アニメーションを分割する

繋がっているアニメーションで可変するアニメーションを表現するのは面倒です。なので、単純にアニメーションを複数のAnimationClipに分割し、Mecanimのステートで制御可能にしてしまいます。

 

分割…と書きましたが、アニメーションを分割して3つのアニメーションにする等では無く、短いアニメーションを作るといった流れが正しいです。

作業の流れ

Modelを選択してAnimationImporterを開きます。

f:id:tsubaki_t1:20170807234836j:plain

後は+を押して新しいAnimationClipを生成、範囲を絞ってアニメーションの一部を取り出します。例えばJamping@loopは170.0~238.0の間のアニメーションなので、そこからジャンプ開始・ジャンプ上昇中・ジャンプ中・ジャンプ下降中・着地を取り出す訳です。

f:id:tsubaki_t1:20170807234648j:plain

f:id:tsubaki_t1:20170807235031g:plain

docs.unity3d.com

関連

tsubakit1.hateblo.jp