C++幼女先輩

プログラミング成分多め

UNITY 2018.3 Timelineで遊ぶ。 任意のタイミングでカットインを実行させる

攻撃して敵が吹っ飛ぶようなのつくる

前回まで

UNITYちゃんをタイムラインで動かした

攻撃してみる

Unityちゃんのアニメーションを合成

まずUnityちゃんにクリップを追加します
とりあえず、移動後にWin00を再生させる
Clipを重ねると補完してくれます

f:id:murasame-labo:20190419053127p:plain

Cubeを飛ばす

上記のモーション再生時にCubeを吹っ飛ばしてみます
CubeはAnimatorがないので、Track作成時にAnimationから作れません
直接Cubeを左側の開いたスペースにドラッグすし、Add Animation Trackを選ぶのが正解です
これで、CubeのAnimationTrackが出来ました
ポジションに注意して、録画ボタンでCubeを飛ばすアニメーションを適当にいれます

f:id:murasame-labo:20190419053427p:plain

前と同じく無限クリップからAnimationClipを作成

f:id:murasame-labo:20190419053505p:plain

f:id:murasame-labo:20190419053615p:plain

箱が飛びました!

カメラをつける

同じようにCameraをAnimationTrackで制御します

f:id:murasame-labo:20190419060407p:plain

f:id:murasame-labo:20190419060422p:plain

うまく制御できてないけど動かす事はできました

任意のタイミングでのタイムライン再生

今は実行時に勝手にタイムライン再生されます
これをボタン押したときに再生させてみます

まず、PlayableDirectorの参照をとっておきます
GameObject.Findなり、Inspectorで参照設定するなり好きな方法で
そして、PlayableDirectorのPlayを呼ぶだけ。簡単

            if (Input.GetKey(KeyCode.V))
            {
                playableDirectorAttack.Play();
            }

今回はVキーに割り当てたけど、ほんとこれだけで任意に再生できます
ただし、任意の位置で前に歩いて、攻撃モーションで箱が飛ぶのでまだまだ対応が必要必要です

今後調査したい

  • Raycast等で攻撃可能かの判定
  • 攻撃対象を複数おき、動的に切り替える
  • カットシーン開始時に敵はこちらを向く
  • カットシーンがぴったり敵の前に移動するよう調整する
  • カットシーン開始時に敵はこちらを向く
  • QTE(Quick Time Event )で他のタイムラインへつなぐ
  • QTEでタイムライン内で分岐
  • AvaterMaskで合成する
  • 武器やモーションが違うカットインを分岐させる

タイムライン使ってみる AnimationClip Unity2018.3

タイムラインとは

Unity2017のあたりでPreviewで入った機能 カットシーンやリアルタイムムービーシーンの再生等で使う
単純に決められたムービーの再生だけではなく、今のシーンからシームレスにオブジェクトを動かしたり可能
また、エディタ拡張でClassを派生させることで、かなりのカスタマイズが可能である

タイムラインの作り

PlayableDirectorが全体の制御を行う
TimelineAssetに全ての中身が入っている
TimelineAssetにはTimelineTrackがあり、トラック単位での制御が可能である
TimelineTrackには複数のClipを作り、実際の動作を作る

その他、Trackをグループ化するTrackGroup等がある

タイムラインの再生前にPlayableDirectorが、Clipに対してオブジェクトをバインドし、ヒエラルキーにオブジェクトをInstantiateし
時間で再生停止をコントロールする

また、 Clipを拡張するには下記の4つを作る事になる(全部が必要ではないこともある)
- Track
- Clip
- Behaviour
- Mixer

タイムライン生成

タイムラインはコンポーネントなので、何かのゲームオブジェクトを選び
Window->Sequence->Timeline でCreateする
これでTimelineAssetファイルを作成することが出来る

AnimationTrack

まずは簡単なキャラを移動させるタイムラインを作る
Timeline左側で右クリックし、AnimationTrackを作る
今回は画面上にあるUnityChanを動かしたいので、None(Animator) にヒエラルキー上のUnityChanを指定する
トラックの右側で右クリックし Add from AnimationClip をおすと、アニメーション選択画面が出るので
例えば Runのアニメーションを選択する
Clipの長さはドラッグドロップで設定できる

f:id:murasame-labo:20190419032059p:plain

次はクリップの設定だ
クリップを選択してInspectorをいじる
イージングやディレイなどを設定できるが、とりあえずは Positionを動かす
Z方向に歩かせてみる

f:id:murasame-labo:20190419032553p:plain

これで再生してみる

f:id:murasame-labo:20190419032645p:plain

キャー 相対座標ではなく絶対座標であり 今回の例では(0,0,5)の位置にワープした・・

tsubakit1.hateblo.jp

この座標に関しては面倒で、以前はAnimationControllerの有無で絶対座標、相対座標が変わっていたが、2018.3からは変更された

Trackを選択するとInspectorにて TrackOffsetsの項目がある
f:id:murasame-labo:20190419041742p:plain
Apply Transform Offsets にすると、絶対座標(ムービー、カットシーン向け)
Apply Scene Offsetsにすると現在からの相対座標で動く
今回は攻撃のカットシーンをやってみたいので SceneOffsetsにする

移動

Z方向に少し移動させたい
通常ではTrackの赤丸の録画ボタンをおし、キーフレーム打ちたい位置にタイムラインシーケンスを設定し、UnityChanのPositionで右クリックで Add Keyframeを行い
シーケンスを動かし、動かしたい位置にUnityChanを動かし 再びKeyframeを打てばよいのだが
なんと、Humanoidはこの録画ボタンがきかず 動かせない!!
ところが、簡単なやり方がある

先ほどのAnimationTrackを右クリックし Add Override Trackを選択し、そのOverrideTrackにて上記のキーフレームを打てば
Humanoidでも移動してくれる

f:id:murasame-labo:20190419041813p:plain
f:id:murasame-labo:20190419041822p:plain

実行すると、現在位置から動いてくれた

f:id:murasame-labo:20190419041930p:plain

無限クリップからアニメーションクリップへの変換

docs.unity3d.com

の通り、無限クリップから変換 クリップを右クリックして Convert to animation clipを押すだけ

f:id:murasame-labo:20190419042303p:plain

UNITY StandardAssetを使う

久々にUNITYを使ったら StandardAsset周りで苦労したので

Import

昔はメニューの Assets->Importから StandardAssetをImport出来ていたが、今はメニューにない
AssetStoreから StandardAssetを検索しダウンロードして Importする

エラー

StandardAssetをImportしたらエラーが出る事がある
が、Unityを再起動すれば直る事が多いので、一度再起動する

ThirdPersonControler

ついでなのでキャラを動かしていきます
今回は適当にTerrainを置きます
StandardAssets -> Characters -> ThirdPersonCharacter -> Prefabs ->ThirdPersonControler を、シーンに置く
Cameraを ThirdPersonControlerの中に置く

f:id:murasame-labo:20190418233354p:plain

実行すると、動きはぎこちないながら、WADで移動、Spaceでジャンプ、Shiftでゆっくり
歩くことが出来る

f:id:murasame-labo:20190418233504p:plain

UNITYちゃんに変更

Unityちゃんをヒエラルキーに置き、そこにカメラを置く

f:id:murasame-labo:20190419010524p:plain

UnityちゃんのGameObjectに各種Componentをつける
Animatorには ThirdPersonAnimatorController、unitychanAvatarを設定
カプセルコライダーとThirdPersonスクリプトを2個つける

f:id:murasame-labo:20190419010845p:plain

実行すると、ぎこちない動きだが UNITYちゃんを動かす事ができる

f:id:murasame-labo:20190419010946p:plain

UnityのマルチプレイヤーネットワークAPIについて

種類

UNet

UNITYの5.1から入ったおなじみのAPI
こうレイヤーのHLAPIと低レイヤー LLAPIがある
が、これは間もなく廃止予定だ

blogs.unity3d.com

Multiplayer

次世代のネットワークAPI
だが、フォーラムによると、まだ機能的にはしょぼいらしい
2021年にはUnetよりはるかに便利になっている予定だそうだが、かなり先だ
ECSやJobSystemを使い、マルチスレッドで ある程度アンマネージドで高速実行するようだ

現在はどうやらGithubにソースがあり、それを使うようだ
github.com

Photon等のmBaaS

各社独自のサービス展開をしている

ではどうするのがいいのか?

Unetは廃止予定ではあるが、今いまは使うしかないと思う
もちろん私のような人柱は Githubから落として新機能を使ってもいい

Unetでは高レベルのHLAPIと低レベルのLLAPIがあるが、フォーラムを読んでるかぎりでは
UnetのHLAPIから New Multiplayerへの自動変換を予定しているらしい
LLAPIからの変換は困難であきらめた雰囲気がある
また、New Multiplayerは HLAPIと似たインタフェースにするっぽいので
今はUnetのHLAPIで書いておけば問題がなさそうに感じる

mBaaSを使う選択肢は当然大いにある
HLAPIであっても、かなり面倒なコードを書く必要があるが、mBaaSを使えばそれが圧倒的に楽になる

4月台湾 初日。桃園〜新店〜坪林〜羅東 1

理由

花粉症がひどいので毎年この時期は花粉疎開しています
特に去年とかひどすぎて、2月から花粉ダウンし3月案件終了し4月になり即1ヶ月台湾旅行しました
今年は花粉はかなりましなんですが、辛いことには違いなく
3月で常駐をやめ4月に台湾に飛びました

今回は9日ですが、花粉期間はずっと疎開できればいいけど、忙しいときは数日難を逃れるだけでも違うと思います
台湾にする理由ですが、安くて便が多く、いつでも思い立ったら買えるし、急に仕事で呼び出されても帰れる近さがいいです

あと、食べ物がとても美味しい。日本人向けの味になってます

その初日です

旅行先決めるまで

2月の時点で花粉を認めていたが、例年よりは軽いかな
当時、週2日常駐していたが、案件都合で契約を終了させ、4月からフリーが決まった
フリーと言っても、持ち帰りは3,4件あるから、ちょうどいいぐらいの量
実は持ち帰りであれば、室内にこもって空気清浄機回してれば生きていけるのですが
せっかく出し今年も海外に飛ぼうと色んな国を計画

今回は花粉から脱出して仕事をすることなので、仕事重要

香港(深セン

香港エクスプレスで、まーまー悪くないフライト発見
香港は宿が悪くて高いので、そこだけ何とかすればいい街だ
特に、ブルース・リージャッキー・チェンサモ・ハン・キンポー、ユンピョウ・・ 憧れの香港スターの街だ
ご飯も美味しい(少し高いが
深センには友達がいて、いろんな会社に訪問する予定だ
だが、会社訪問を私の休みの都合で決めるのもよくなく
プレゼンするブツ作って、改めて訪問に決定し、今回の旅行はやめた

マレーシア

エアアジアがたくさん便をだしていて、ネット環境もよく、部屋も安く借りられる
また、ご飯が好みで知人もいて、将来の海外展開の候補地
今回は あまり魅力的な便がなくやめた

タイ

安くて魅力的なチケットがあった
宿は安くて良いし、食べ物うまいし、最高なんだが
ネット環境がガチャだ
バンコクにいい床やど見つけるまでは仕事怖い

インドネシア

インターネットが壊滅的に遅い

中国大陸

行ってみたい。特にお茶ツアー
計画しなきゃ

ベトナム

食べ物美味しいし仕事も繋がりあるし、今後も行くことになりそう
ただ、直前ではいい便みつけられず

台湾

すべて安心
ただし4月の1週は大型連休&5月末にもチケット取ってる
今回はどこに行く?花連前回は1泊だったからちゃんと泊まろう

結論として台湾を1〜9で抑えました
今のメイン案件が4月末にマイルストーンあるので、申し訳・・

羅東はいぜん良かった宿に直接LINEで申し込み
花連は以前の宿はネット弱かったので、Booking.comで新しい宿探した

初日

台北 桃園空港まで

f:id:murasame-labo:20190402061049p:plain
朝5時半の便。2時半にチェックイン開始なので、終電で行き羽田に前泊する
3時間ほどご飯食べたり仮眠したり時間をつぶしチェックイン〜ラウンジ〜フライト
あっという間に桃園

f:id:murasame-labo:20190402060955p:plain

桃園〜新店、SIMのチャージ

台湾ではけっこうWifiあるのだけど、そんなところにケチらずSIM買います
ただし、SIMは裏技?があるのでそれを利用します
とりあえず大雑把に書くと
空港では計日のSIMしか買えません。3日で1200円、30日で4000円です
使い放題なので、いっぱいパケット使う人は計日が良いですが
殆ど使わないと思うので、計量SIM つまり2GBとかの容量のものが楽です
2GBだとだいたい1200円で、有効期限は180日です
私の場合は、例えば去年は4月1〜29まで台湾にいき 500MBも使わず、8月に10日ほどで 結局700MB程度の使用量でしたが
本来であると 6000円かかる計日SIMが、計量だと1200円でまだ半分以上あまってた
今回は180日過ぎているため、前回のチャージは消えてますが、前のSIMにチャージします

細かい手順は後ほどですが、コンビニでも露天でもチャージできて便利です。しかも、アプリからチャージできるのです
パウチャーカードだとさらにお安く・・
今回はSIMがチャージから180日オーバーしてたので、店舗で一応チャージしてもらうことにしました
おそらく、パウチャーカードでもチャージ出来るのですが念の為に

桃園よりバスで新店へ行く。いやまてよw運転手w運転前に酒盛りwww
新店は昔の遠距離バスターミナルで
今は台北の市政府が中心ですが、今回行く坪林方面には、ほぼここからしかルートがないです(あるけど)
ちなみに新店は別名大坪林です。坪林とのつながり??

新店でSIMをチャージしたあとは、バスに乗り坪林です
ここは製茶ミュージアムがあります

f:id:murasame-labo:20190402061935p:plain
f:id:murasame-labo:20190402062221p:plain

製茶ミュージアム今日おやすみだったよ!
ってことで怒って帰ります
今夜は羅東で泊まるよていなので羅東行きのバスを探す見みあたらず
お店できいたら、常連らしいお客さんが酒盛りしてた
が、親切にバス停まで車で案内される・・飲酒だけどね

そして無事 羅東到了

f:id:murasame-labo:20190402180726p:plain

花粉疎開 海外旅行のお供の電子機器

花粉疎開で毎年この時期は海外で仕事です
毎年台湾いってますね
今回の電子機器をまとめます

サマリー

目的は花粉避難である。観光ではない。花粉のない土地で仕事をしつつ美味しい料理を食べる
4/1~4/9 8泊。台湾では大型連休なのでお店は休みな場所も多い
羽田〜台北台北〜羽田
今回は、のどかな花連に暮らす
大雑把な予定
4/1、4/2 速攻で羅東の常宿へ行く。色々お世話になった友達のお店でお土産も買わねば。4/2は半日かけて玉蘭茶入手する
4/3、4/4 花連。はじめての宿のためWifi環境などが未知数である
4/5、4/6、4/7 未定。宿が仕事に快適であればそのまま連泊かもしれず、なんとなく台東(池上?)行くか台北戻るか?
4/8、4/9 帰国のため台北へ戻る。

仕事

現在、ゲーム開発2件、VTuber4件、仮想通貨1件 を主に行ってます
UNITYはWindowsのほうがメリットが多いのですが
もう3年目でバッテリーの持ちが悪い事、仕事データが入ってる事、MBPより重い
などの理由から、今回のお供はMBPです
ゲームの案件は持ち帰りですが、海外からのVPN接続にお客さんがネガティブなので
今回は、プロジェクトに直接関わる仕事はせず、下記のタスクを行う

  • ゲーム案件用のビュワーの改修
  • UNITYのパフォーマンスチューニング(主に分割シーンまわりの)
  • UNITYの案件で使うAsset調査
  • UNITY、.net のメモリまわりのProfilingやチューニング勉強(Macじゃできない)
  • VTuber関連の開発(モックの改造)
  • 3DCGツールの勉強(これもWindowsマシンで行いたい・・)
  • iPhoneX TrueDepth、ARKit関連(iPhone購入間に合えば)
  • nodeのソーシャルゲームサーバ続き
  • なにか新しい言語勉強(clojure予定)
  • UNITYサンプル作成

また詳細タスクはTrelloなどで落とし込もう・・

電子機器

持っていく電子機器まとめる

  • MBP2017 今回のお仕事PC。USB-C
    タスクリストをまとめてからだが、現状

-- UNITYの各種バージョンのインストール
-- UNITY必要Assetのダウンロード
-- ビュワーのダウンロード
-- VTuberモックのダウンロード
-- iPhoneX ARKit関連のダウンロード(iPhoneX買えたら)

-- 一応GoogleMap落としておこう
-- 中国語翻訳アプリどれにするか

  • iPadPro。USB-C

-- GoogleMapダウンロード
-- Kindleの本を購入&ダウンロード
-- プライム・ビデオダウンロード

  • BlueToothヘッドフォン。USB mini
    iPadProが物理不可能なので 必須

  • iPhoneX USB-C
    購入間に合えばもってく

-- セットアップ

  • iPod Lightning

  • モバイルバッテリー。USB mini

つまり、USB-C 3本、Type-B 3本 Lightning 1本だ

ぐぬぬ・・・多い・・・

少し環境の変化

3末でKLab常駐終了

プロジェクトがめどがたったのもあり、3末で1件契約終了しました
同じ会社の他のプロジェクトに行くことも考えましたが
今現在、別のゲームの開発リーダポジのため、そちらに集中することにしました
つまり、炎上してるという事です
詳しくは書けませんが、うちの会社のせいではない炎上ですが、飛び火してくること確定なので

4月から

3末の終了が決まった瞬間に行ったのは、他の案件の4月のスケジュール調整でした
メイン技術やっているゲーム案件は、もう少しコミット出来るという話をし
VTuberやシェーダー開発、部下の仕事などいろいろ調整を行い
終了がきまって4日後に4月1日~10日の間、自由に動けるスケジュールを作った
その後、深セン、マレーシアの知人に連絡をとり、営業まわりをその日程でいけるか確認
その結果、香港経由で深センに行き営業するスケジュールは可能だったが
ちゃんと見せられるモックや、もっといい営業タイミングは6月ごろかな?という事で
結局台湾の営業に行くことにして
1週間後には、チケットをとった

今後

3末で終了したものの、今の案件が終了したら戻ってくる予定なので
それまでに、会社にもっと貢献できるよう、技術をもっと磨いていこうと思います
KLabさんは技術力も高く、環境もとても良い、タレントエンジニアも増えているのでまた仕事したいですね
会社の都合では、サーバインフラはもともと強く、UNITYエンジニアを強化したいとのことなので
UNITYの勉強を頑張ろうと思います

とにかく、UNITY頑張る!

UNITYの勉強の仕方

まず、C#をちゃんと隅々まで理解する
UNITYは、パフォーマンス、レンダリングを中心に全体を見れるようにしようと思う
基礎をかためたら、色々なテスト実装してみたい
そして、「UNITY共同体」と、3D技術者の集まりなど、もっと積極的に、技術者をつなげる仕事したい