VRChatをやってみたいと思っていて、VRChatで自分のアバターを作るにはUnityらしかった。そんなわけでUnityを勉強してみる。Unityは2D/3D用のアプリ開発ツールと思ってますが、オブジェクト?を動かすのはC#で定義するらしい。一冊本を買ってみた。YouTubeでも解説動画が出ているので、ピンボールのようなアプリを作ってみた。下の画面はUnityを使ってピンボール風のボードを作っているところ。
ボールの動きは以下のC#で定義、壁にぶつかったら、X,Z方向の速度Vx、Vzを反転させるというだけのプログラム
Updageメソッドが画面更新時に全オブジェクトに対して呼び出されるので、ここに動作を規定しておけば、アニメやゲームのような動きになると。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallBehaviourScript : MonoBehaviour { private float v_x = 0; private float v_y = 0; private float v_z = 0; AudioSource audioSource; AudioClip sound1; // Start is called before the first frame update void Start() { v_x = -10; v_y = 0; v_z = -10; // get Component audioSource = GetComponent<AudioSource>(); } // Update is called once per frame void Update() { float delta_x = v_x * Time.deltaTime; float delta_z = v_z * Time.deltaTime; transform.position += new Vector3(delta_x, 0f, delta_z); //Debug.Log(transform.position); } private void OnCollisionEnter(Collision collision) { string tagName = collision.gameObject.tag; Debug.Log("collision"); Debug.Log(tagName); if (tagName == "Paddle" || tagName == "Wall_Z") { Debug.Log("target is paddle or wall"); v_z *= -1; audioSource.Play(); } if (tagName == "Wall_X") { v_x *= -1; audioSource.Play(); } } }
ボールが壁にぶつかると跳ね返りますが、その際に音もなるようにしています(audioSource.Playを利用)。
とりあえずみんなが最初に作るアプリと思われ、珍しいものではありませんが、一応動いている画面は以下
youtu.be
■追記(2022/06/09)
Unreal Engineの方がレンダリングがきれいなので、UnityからUnreal Engineに変更する。推奨PCはWIndows+GPU(グラボ)なのだが、自分の環境はMac Book Proだ。GPUとかはそれほどなので、、パワー不足になりそうだ。
■関連情報
C#の観点からUnityを学ぶ本
本の半分ぐらいはC#の文法を解説しています。後半がC#でUnityのオブジェクトを動かす説明。
動画付きで分かりやすいドットインストールのUnity解説(無料です)
dotinstall.com
https://learn.unity.com/course/unity-tutorials-for-beginners-jp?language=ja