Re:iN works

覚書き

Arbor 2でもやってみた

はじめに

過去記事でPlaymakerでやったことを Arbor 2 でもやってみることにした。

ビジュアルスクリプティングはPlaymakerが初ではなく、Arbor 2のほうが先に購入しております。 (実は未だにメインは Arbor 2だったりします)

Arbor 2 とは

 日本人製作者の  

caitsithware(Unity使い (@caitsithware) | Twitter 様が作成されたUnityでビジュアルスクリプティングを実現するためのアセットです

 

arbor.caitsithware.com

 

日本語での解説があり、試用も可能と初心者にはうってつけだったので飛びついてみて大正解でした。 (分かりやすくて、その日に購入していたりします。)

 (あ・・・誤字)

さっそくやってみる

Trigger Eventでつまづいたところ - Re:IN works

f:id:riesenrein:20170518223659g:plain

余裕でした。

 

アタッチされたスクリプト内の関数実行 - Re:IN works

f:id:riesenrein:20170519001320g:plain

Send  Message 後に 次のステートに行く方法が良くわからないので Time Transition 0 といういつものやり方... 正しいのでしょうか?

 

f:id:riesenrein:20170519003146g:plain

常駐ステートでやれば戻る必要はないけど、ステートの状況が分からなくなるのは辛い手段を模索しないといけないですね

 

PlaymakerでiTweenのパスに沿った移動を使いたい - Re:IN works

 iTweenが統合されていないので、デフォルトではできない... ただカスタマイズが容易なのでステートを作成すれば簡単に実現できそうです。

(いずれやってみます)

 

さいごに

Arbor 2はカスタマイズ性を売りにしていますが、それ以上に日本語解説が公式でやっていただいているのは助かります。

また、Arbor 2 が Unite 2017 Tokyo の基調講演で実例として使用されており今後も期待がもてます。 (階層化のお話は大変勉強になりました)

www.slideshare.net

 

 またフォーラムで上記の対応の質問を受けすぐにサンプルを出されるのがスゴい

 これからも使い続けるアセットになりそうです。

PlaymakerでiTweenのパスに沿った移動を使いたい

はじめに

前回までの作業がひと段落したので、色々とテスト中

PraymakerではiTweenも統合されてて、すごく便利に扱えるのですがちょっと詰まったので覚書 

スプラインに沿って移動させたい

Cinema4Dでアニメーションさせるとき、スプラインに沿って移動 という手法を使うことがあります。

f:id:riesenrein:20170517001628p:plain

オブジェクトに "スプラインに沿う" のタグを追加して、パススプラインに 沿わせたいスプラインを指定し、スプラインの位置を時間と共に増やすことで簡単にスプラインに沿ったアニメーションが可能です

 

同じように、スプラインに沿って移動させるのをUnityでも行いたいと思ってググったらiTweenで実現できそうな情報が。 

 iTweenとは

あまりにも有名すぎるので割愛...

ググると情報にあふれております

doggy.hatenablog.com

自分の感覚としては、非常にシンプルなコードで簡単にアニメーションを行えるという印象 (とはいえ、コードは書けないので それすらも難しい...)

Unityでスプラインに沿ってオブジェクトを移動させる

そもそも、Unityでスプラインって描けない? Game Objectを見てもスプラインが見つけきれない...  じゃぁ、移動パスとなるスプラインを書く方法はどういう風にすればよいのだろう?

nn-hokuson.hatenablog.com

iTween Visual Path を導入すればよいらしい。 前述の記事に従い、iTween Visual Motion path editor を導入し、スクリプトをアタッチすればパスに従いオブジェクトの移動ができました 

じゃぁ、Praymakerでやるには

PraymakerのiTween分類の中には数多くのコマンドがあります

f:id:riesenrein:20170517004015p:plain

I Tween Move To がポジションの移動に使えそうと判断 ( 前述記事内にも関数内に iTween.MoveTo って文字があった)

 

I Tween Move To のパラメータを見てみると

f:id:riesenrein:20170517004847p:plain

Pathの欄があるので、これで動かせそうと思ったけど動かない...前述の記事で パスの名前を指定してたのでどこかで指定しないといけないのだろうけど各値には記入ができませんでした

 

解決

キーワード:playmaker itween パス でググると日本語が含まれているにも関わらず、トップは英語... playmaker本家のHelpがトップに出てきました

Integration with iTween Visual Motion Path Editor?

リンクをたどって見てみると iTweenMoveTo_V2 なるものがありそうなのですが、フィルタリングしても見つかりません。よくよく文章見てみると、 Ecosystemなる文字列が

Ecosystem

どうも、追加スクリプトの導入・管理のツールらしい。そういえば、playmakerインストール時のWelcome画面の add-on で そんな文字列も見た記憶が。

早速導入して itween でフィルタ掛けてみつかった。

f:id:riesenrein:20170517010634p:plain

導入、パラメータ確認すると

f:id:riesenrein:20170517010824p:plain

前回は無かった Path Nameの欄が増えてる。 これにPath Editor で作成した際のパス名を追記することで、パスに沿った移動が可能となりました

さいごに

これで、パスに沿った移動ができるようになったので、表現手法が増えそうですね。iTweenもplaymakerを使えばパラメータ設定も容易に指定できるため積極的につかうことになりそうです。

 

アタッチされたスクリプト内の関数実行

はじめに

前回 Enable Behaviour と MecanimJitter の挙動を考える - Re:IN works のさいごに で関数を実行できれば once の起動ができることが分かったので手段を模索する

とりあえずやってみる

ググる前にアクションブラウザの検索機能を使って思い当たる文字列で、それっぽいのがひっかからないかみてみる

script ⇒ add script しかない ×

function⇒ 何も引っかからぬ。 ×

これ以上、思い当たらない当たりがプログラミングの知識不足ですね

やっぱり頼りになるのは

google先生!! キーワード:Playmaker 関数 実行

よい情報が見つけれない。日本語情報だけではダメなのようだ。

 

キーワード: Playmaker function

3番目のヒットに Youtubeの画面が。なんかそれっぽいタイトルなのかも。

ひっかかったのは 12 - Connecting Scripts to Playmaker

www.youtube.com

でした。 本家のチュートリアル動画じゃないか。

普段は字幕を日本語に切り替えてみるのだけど、なんとなく英文で字幕よんでいたら最初の1分でこの動画で正解じゃね?という期待がでてきた。

解決

Send Message ですかぁ... 全然思いつかない名前だった。

f:id:riesenrein:20170511010823p:plain

 

カテゴリ名が ScriptControl ・・・ カテゴリ名からも期待できる。今後は、カテゴリ名もしっかり見るようにしよう

On Trigger の Enterイベントで遷移 Send Messageをセットして Game Object は スクリプトをアタッチしている GameObject を設定

f:id:riesenrein:20170511002747p:plain

メソッド名は手打ちしたら、結局打ち間違えてうまくいかなかったら、右のボタンクリックしたらスクリプト内に含まれる関数が出てきてた。こっから選べばいい

そして実行で、成功した!!!

さいごに

とりあえず、やりたかったことはできたのでテスト

f:id:riesenrein:20170511004843g:plain 

モデルは つみだんご様の 航巡鈴谷改二 をお借りしました (かわいい)

【MMD艦これ】鈴谷改二のメーベル【モデル配布】 by つみ その他/動画 - ニコニコ動画

 

今後はこのモデルにモーション等をつけて、表現方法を増やしていくことを覚えようと思います。

 

* 2017.05.19 Arbor 2 でもやってみた

works.riesenrein.net

Enable Behaviour と MecanimJitter の挙動を考える

はじめに

本記事は 前回  Trigger Eventでつまづいたところ のさいごに にて未解決の Playmaker での Enable Behaviourを使ってスクリプトの有効/無効を切り替え と いちか様 作成のUnityアドオン MecanimJitter  MMD4Mecanimアドオン MecanimJitter作ってみた - Unityの備忘録的な を組み合わせの使い方の模索の経緯です

やってみる

Triggerエリアに物が入ると、 MecanimJitterで ONCEで設定したものを1回だけ実行したい

f:id:riesenrein:20170510002433p:plainf:id:riesenrein:20170510002434p:plainf:id:riesenrein:20170510002435p:plain

 

待機状態でスクリプトを無効 → On Triger Enter で遷移して スクリプトを有効にする

f:id:riesenrein:20170510003033p:plain

GameObjectにアタッチしているスクリプトの有効/無効を切替するということでできないかなぁと思ってました。

⇒スクリプトの有効/無効の仕方はこれであってたみたいだが 結果は NG・・・ ONCEに設定されているものは 有効になったときに実行されるわけではなく、Play Once を押したときにしか実行されない

暫定でもやってやる

じゃぁ、LOOPの挙動はどうなんだろうと思ったら、INTERBALの設定値に関わらず、まず1回実施されて そのあとでINTERBAL値分待つ格好だった。

LOOP間隔を広げておいて1回実行した後で スクリプトを無効にすればいいじゃないということで、

f:id:riesenrein:20170510002903p:plain

(この時、Sync にチェックを入れておかないと3つの動きがランダムになってしまったので、Syncは忘れずにチェックを入れる)

 

⇒ 結果は NG... On Triger で遷移してスクリプトを有効にした後、すぐに待機状態に戻るので 動作途中にスクリプトが無効になりすぐに元に戻る

 

安直なやり方でこの後にWaitをいれればできるわなということで、やった結果は とりあえずはOK

だけど、 Wait時間分待つことになるので その間に次のOn Trigger が発生しても遷移しないので やっぱりダメ

 

さいごに

今更ながら改めてチュートリアルを見ると

youtu.be

スクリプトからはPlayoOnce() を実行すればよい

と書かれておりました。

今度はPlaymakerで関数の実行方法を探ってみましょう

※2017.05.11 続きました

riesenrein.hatenablog.jp

Trigger Eventでつまづいたところ

 

前置き

Windows版 Unity 5.6.0f3 Personal(64bit) での発生(その他環境では未確認)

筆者はUnity初心者 & C#やJSを理解しておりません 

 

以上のことご了承いただき、生暖かい目でみてやってください

(ゆっくりがんばります)

 

はじめに

これを 自分のできるレベルで実施したかったんで、ある領域に入ったら驚いた表情をするようなこと考えた 。 

いちか様が公開いただいたアドオンで簡単にMorphやBorn の動作をランダムループや1回だけ等で動かすことができるようになりました。

ichika292.hatenablog.com

 すごく使いやすく、また内容も充実しており大変助かります

 

つまづきポイント

まずは、領域をつくって そこに入ると次の動作に移ることを考えた。

 Playmaker での Trigger Event はお勉強済 (のつもり)

www.youtube.com

だったので、これで実現できそう・・・と思ったのだけど、まずTrigger Eventがうまくいかず次の状態に遷移できない。

 チュートリアル用のシーンでは問題なくできた

 

f:id:riesenrein:20170508201504g:plain

 

けど、一から作るとうまくいかない...

 

f:id:riesenrein:20170508201543g:plain

 

 

調査

困ったときのGoogle 先生 キーワード:unity trigger でググると一発目に本家が出てくるのは、いかに充実しているか分かりますね

docs.unity3d.com

<引用>

"このメッセージはトリガー状態の Collider、その Collider が属している Rigidbody (存在する場合)、 そのトリガーに接触する Rigidbody (Rigidbody がない場合は Collider) に送信されます。"

<引用終わり>

Rigidbody ってのがキーワードっぽい。接触する相手のInspectorを見るとRigidbody が無い

f:id:riesenrein:20170508013857p:plain

もうちょっと調べてみると

Post Position 【Unity】 静止した物体同士の当たり判定の検出について

 <引用>

どちらかにRigidbodyが必ず付いていること
RigidbodyのIs Kinematic(物理挙動をさせない)にチェックが入っていること
ColliderのIs Triggerにチェックが入っていること

また、さらに以下の様な条件がある。
Rigidbodyが付いている方のオブジェクトが移動もしくは回転している(静止しているとダメ)
(ただし、起動直後のフレームだけは静止していても検出可能)

 <引用終わり>

というものらしい ... そういうものだと理解してトライすると成功

(トリガー側だけ、 もしくは衝突相手 だけ 、また両方でもOK)

 

もうちょっと突っ込んでみる

ここで、Playmakerのチュートリアル用のシーンで使われているものを見てみた

f:id:riesenrein:20170508023716p:plain

あれ? Rigidbodyがない。だけど問題なく動くことから有効/無効で確かめてると、Charactor Controller を無効にすると、Trigger がとれなくなる。

またまたGoogle先生のお時間 キーワード:unity charactor controller

docs.unity3d.com

<引用>

Character Controller は、主に Rigidbody による物理特性を使用しない、3 人称や 1 人称のプレイヤー制御に使用されます。

(中略)

プレイヤーキャラクターが物理特性の影響をうけるようにしたい場合は、Character Controllerの代わりに、Rigidbody を使用した方がよいでしょう。

<引用終わり>

 

そういうものらしい。 

Charactor Controller の場合は、トリガー範囲のほうに設定してしまうとEnter扱いになり使えないので衝突相手に設定しないといけませんでした。

 

解決まとめ

いずれか(もしくは両方)の方法で対応

  • Trigger 範囲 に Rigidbody を設定
  • 干渉相手にRigidbody or Charactor Controller を設定

Rigidbody を使うか Charactor Controller を使うかは 目的・ 用途で使い分けしていかないといけないわけですね。

MMD4MecanimからもってくるモデルにはColliderは設定されないので一工夫が必要になると思います。

* 2017.06.24 Colliderは設定可能でした (いずれ別記事で)

 

さいごに

最初に目的としていた未達成です

Enable Behaviourを使ってスクリプトの有効/無効を切り替えればいけないかなぁと思ってたのですが、ループの場合は動作/停止 を切り替えれるのですが onceの場合は有効になったときに1回だけ... という風には動かないようでした。

まだまだ勉強しなければなりません。

UnityもHoloLensでのモデル表示ぐらいしかできていないのが現状です。

最低限のチュートリアルだけを見て触っている段階ですので、もっと色々とみていかないといけないですね

 * 2017.05.10 続きました 

riesenrein.hatenablog.jp

 

* 2017.05.19 Arbor 2 でもやってみた

works.riesenrein.net