本記事はDEMO動画にある、
「Unity+AIを用いた手書き数字識別システム」の実装方法について説明する。
フワッと表示させる処理は下記サイトから引用しました。
Unityで基本オブジェクトをフワッと表示させる - MRが楽しい
- 本記事のテーマ
- Demo
- 実装動画
- 実装環境
- ソースコード
- フワッと徐々にオブジェクトを出現/生成する方法
- 出現・生成する位置を指定する
- オブジェクトを徐々に大きくする
- Fungusからオブジェクト生成関数を呼び出す。
- 参考文献
- 関連記事
- 前回の記事
本記事のテーマ
「フワッと徐々にオブジェクトを出現/生成する方法」
を実装する。
下記DEMO動画内の1:34付近。
Planeオブジェクトが大きくなりながら出現させる方法を実装します。
Demo
実装動画
本記事の実装を録画した動画です。
実装環境
- Ubuntu20.04
- UnityHub2.4.2
- Unity 2019.4.21f1
ソースコード
Githubで管理
・make-objects-apper-graduallyブランチ
ブランチの切り替えは下記画像の赤枠をクリックして変更できる。
フワッと徐々にオブジェクトを出現/生成する方法
コードはSmallCubeDirector.csに追加していきます。
オブジェクトの生成はスクリプトから行います。
まずは、Awakeでオブジェクトを作成します。
使用する関数はGameObject.CreatePrimitive()です。これでPlaneオブジェクトを作成します。
void Awake() { csvReaderPlane = GameObject.FindGameObjectWithTag("csvReaderPlane"); questionBoard = GameObject.CreatePrimitive(PrimitiveType.Plane); }
出現・生成する位置を指定する
1. transform.positionで出現させる位置を決定します。
2. transform.RotateでPlaneオブジェクトを回転させます。
1. transform.position
positionを数値で指定するのは難しいので一度UnityのScene画面でPlaneオブジェクトを出現させたい位置を決めてから、その時のInspectorにある座標をスクリプトでしようするのが良いと思います。
2. transform.Rotate
Planeオブジェクトはデフォルトでは面が下を向いているので前へ向けるためにX軸に90度回転させています。
public void GenerateQuestionBoard(){ // 位置調整を行う questionBoard.transform.position = new Vector3(2.3f, 1.5f, -30.0f); questionBoard.transform.Rotate(new Vector3(90, 0, 0)); // フワッと徐々にオブジェクトを出現させる int test_num = Random.Range(2000,3000); Listimg = test_images[test_num]; List<List > img_byte2D = convert_data(img, true); AttachImage(questionBoard, img_byte2D, IMG_WIDTH, IMG_HEIGHT); StartCoroutine(AppearGradually(questionBoard)); }
オブジェクトを徐々に大きくする
target.transform.localScaleでオブジェクトの大きさを指定できます。
はじめにここを0に初期化し、for文で徐々に大きくしていきます。
WaitForSecondsは処理が指定時間Stopする関数です。
※プログラミングでよくあるSleep関数みたいなものです。
IEnumerator AppearGradually(GameObject target) { // 繰り返し回数 int loopcount = 10; // 更新間隔 float waitsecond = 0.05f; // スケール設定 // オフセット値 float offsetScale = 0.15f / loopcount; // 更新値 float updateScale = 0; // オブジェクトの大きさを0にする target.transform.localScale = new Vector3(0.0f, 0.0f, 0.0f); for (int loop = 0; loop < loopcount; loop++) { // スケール更新 updateScale = updateScale + offsetScale; target.transform.localScale = new Vector3(updateScale, updateScale, updateScale); yield return new WaitForSeconds(waitsecond); } // 最終スケール target.transform.localScale = new Vector3(0.15f, 0.15f, 0.15f); yield return new WaitForSeconds(3f); }
Fungusからオブジェクト生成関数を呼び出す。
今回はFungusという会話機能ライブラリから会話の最後にPlaneオブジェクトを生成する方法を説明します。
FungusのFlowchartオブジェクトから使用する会話を選択します。
1.+ボタンから赤枠のInvoke Eventを追加します。
2.青枠に使用したい関数のスクリプトを持つオブジェクトをドラッグ・アンド・ドロップで追加します。
3.緑枠の箇所で呼び出したい関数を選択します。
上記の1−3を実行すると、Invoke Eventを追加したタイミングで関数が呼ばれるようになります。
以上で実装は終了になります。
もし、動かない場合はコメント欄にて報告して頂けますと助かります。
参考文献
関連記事
前回の記事