Unity学習シリーズその1。シロちゃんは犬キャラです。
その時の思いに任せて、やりたい事の中でやれそうな事を、先ずやってみた雑記。
Unity LearnのVisual Scriptingのチュートリアルの初めの方をやってみた編の第二弾。
(ブログの記述は、チュートリアルの全ての番号には対応していません。)
前回は、Script MachineコンポーネントのNewボタンから新しいGraphを作成しました。
Unity学習−1 Visual Scripting 1
Tutorial:Program a visual script
1。Overview:概要
今回はScript Graphウィンドウを使って、Graph内でビジュアルスクリプトでプログラミングし、シーン上のGameObjectを変更する論理フローを作成します。
2。Start and Update:StartイベントとUodateイベント
Newのボタンから新しいGraphを作成した場合、Graph内にはStartイベントとUpdateイベントは既に作られています。(C#スクリプトのコンポーネントを作って開くと、Start関数とUpdate関数が既に書かれているのと同じです)
Graph上の長方形のノードはunit(ユニット)と呼ばれ、インストラクションもしくはイベントを表します。
Updateイベント:Playモードで発生する各フレーム(画面の更新)ごとにトリガー(実行)される。
(このチュートリアルではRotationのスクリプトを描くので、Graphはフレームごとに一定の角度で立方体を回転させる。)
Startイベント:Playモードの開始時に、一度だけトリガーされる。
(このチュートリアルでは使用しないので、StartユニットはDeleteキーで削除。)
トリガーされるのと実行するのとは同じことなのかな。
3。Display the Fuzzy Finder:Fuzzy Finderの表示
Graphにunitを追加します。
Graph画面上を右クリックすると、Fuzzy Finder(unitのコンテキストメニュー)が出てくる。Unity Scripting APIを含めた、あらゆるタイプのunitが入っていて、unit名で検索したり、カテゴリから選ぶことが出来る。
4。Find the unit you need:必要なunitを検索
必要なunitを見つけるには、多少Unity APIに慣れる必要があります。このチュートリアルでは、“Transform: Rotate”のunitのoverloads(オーバーロード)の中から、入力パラメータのセットがXYZのものを選びます。
検索窓に“rotate”を入れると、リストにTransform.Rotate(X Angle, Y angle, Z angle)が出てくるので選択。このunitは、GameObjectのTransformコンポーネントのRotateの設定を制御する。
オーバーロードとは何だろう。 参考:メソッドのオーバーロードについて >>メソッドの中身がほぼ同じで、引数の型が違うプログラムなどを作る際に用いられるようです。 なるほど、C#でも同じオーバーロードという言葉が使われるようですね。
5。Examine a unit:unitの概要
新しいunitができました。
Self(This):このunitが、Machineを介してこのGraphに接続されているGameObjectをコントロールする。
➡︎:unitからunitへのフローの順番を示している。
◯:値やObjectをunitからunitへ移動させるために使う。ユニットの左側が入力で右側が出力。
各入力のobject Typeのインジケータ:この場合、X Angle,、Y Angle、Z Angleの左側にある青い◯のことで、水色(青)は浮動小数点数を意味する。
ヘッダーの部分(画像では、赤青緑の回転マークの横にTransform Rotateと書いてある頭の部分)がグレーのunitは、instructionらしい。指示や命令? チュートリアルの画像では、ThisのところがSelfになってる。変わったのかな、意味は同じだよね? C#のスクリプトで、「この」GameObjectの意味で、this. と書いてあるのを見たことがある。C#に近い感じにあわせたのでしょうか。 Transform.Rotate unitの右側(出力側)に◯がない🤔 何か処理をするだけで値を返さない?から?🤔
7。Configure a unit:unitの設定
unitが作業フローに接続されていない状態だと、クリックで選択しておかないとunitはグレーアウト表示になる。接続していない状態でもはっきりと見えるようにしたい場合は、Graphウィンドウ上部のメニューにある、Dimをon/offすることで切り替えができる。
Update unitの矢印から、Transform.Rotate unitの矢印にドラッグしてフローを繋げる。(フローの矢印の削除は、矢印の起点(左)側の端で右クリックしてDelete。)
色々いじっていたら、途中でユニットがどこかに行っちゃって(Graph画面上の座標に何も見えない)、Dimと同じ列にあるOverviewを押したら戻ってきました。
イベント(Update Event)から始まり、イベント発生時に実行される命令で終わる流れができた段階。
再生ボタンを押してビジュアルスクリプトを実行すると、Graphウィンドウでは、矢印に沿ってフローが流れているように見えるが、Transform.Rotate unitの値が0のままなので、Sceneビューでは何も起こらず。どれだけ回転させるかを指示する必要がある。
valuesを変えないとSceneビューでは何も起きないと書いてあるけど、Playを押したら、Sceneビューのcube上に、耳とフロッピーみたいなアイコンが出てきた。フロッピーのアイコンはいつの時代まで使われ続けるのか見守っていきたいです。
8。Change inline values in the Graph:値の変更
回転させるには先ず、unit本体の値(画像のTransform.Rotateノードの各Angleの横の数値)を変更する。
Playモードにしている場合は、一旦終了し、X Angleの値を1にして再びPlayを押す。
Cubeは、1フレームに1度ずつ、X軸周りに回転するようになる。
耳とフロッピーは、valuesの件とは関係がなかったようです。
チュートリアルは3ですが、ここではXYZを全部1にしてみました。
動画の2つのcubeのうち、向かって左側がC#スクリプトのコンポーネントを貼り付けた方。右側のアイコンがついている方がVisual Scripting。
Playモードを終了し、シーンを保存(Ctrl / Cmd S)。
Scene ファイルと、その Scene で使用したGraphの .asset ファイルを保存します。
このような場合、必要な値を見つけるまで、再生、停止、スクリプト編集を繰り返す必要があります。C#のスクリプティングでは、実行中にコードの編集はできませんが、Visual ScriptingではPlayボタンを押した再生中の状態でも、値を変えてその変化を確認することができます。
C#でスクリプトを組む場合、コード内で直接値を指定すると、ハードコード(hard-coded)になります。Visual Scriptingの場合、Transform:Rotate unit内のハードコードされている値を変更しています。
確かに同じ画面で再生しながら値を色々変えて試せるのは楽かも。 値がhard-codedされるとはなんでしょうか🤔。 ハードコーディング(Hard Coding)は初心者の証?回避方法を3分で解説する >>ハードコーディングとは、ソースコードの中に固定値をそのまま書き込んでしまうことです。このハードコーディングとは、別名「プログラミング初心者の証」とも呼ばれ・・・ なるほど、変数宣言しないで、コードに直接数値を入れるあれですね。
番外編。
これがハードコーティングですよね?
MonoBehaviourクラスのtransformプロパティ:GameObjectのTransformインスタンス.Rotateメソッド(); 変えてみました。 どうかな。動きは問題なかったので、取り急ぎこれで。avはここでは、チュートリアルで出てくる名称のangle valueからとりました。 時々、書き換えた後の一発目のPlayで、バグったように速度が速い原因は何だろう。。いずれにしても2回目はゆっくりになったので、このまま次に進みます。
ここに来るまでに一回、Unityのライセンス件で何か問題になり、ライセンスのアクティベートをしないといけない警告が出たのですが、Manual Activationを進めたら使えるようになりました。これでいいのかな。ドキドキ。。
次は、値やオブジェクトを保持できる変数を学ぶようです。Visual Scriptingには、変数を定義したり、スコープを設定したりするための強力なシステムがあるそうです。次回のUnity Visual Scripting3はこちらの項目から再開予定です。
Tutorial:Configure your visual script with variables