どうやらスマホやパソコンのゲームアプリを作るには「Unity」というエディタを使うらしいので、どんなツールなのか知りたいので簡単なゲームを作ってみる。まずはチュートリアルの通りに、たこ焼きをマウスカーソルでクリックするプチゲーム。なるほど、こんなに簡単に2Dゲームが作れることは分かった。

3Dゲームを作るには3つのツールを使いこなさないとダメらしい。それぞれインストールする。
Blenderという3Dオブジェクトを作る。何年か前のWindowsで3Dを描くアプリを2~3万円で購入した時代と違い、今は無料でダウンロードして使えるのだ。ゲームアプリを販売したらその数%を支払うビジネスモデルとの事(個人用や練習なら無料)。練習なので「球体」を6個くっつけて雪だるまを作る。球体なので簡単なのだが、Belenderの操作が直観的では無くて、ショートカットを駆使して操作しなければならず覚えるのが大変。何とか顔の画像を貼り付けて、FunnySnowmanっぽくなった。骨みたいなオブジェクトもあり、走るアニメなんかも作ることができた。

ゲームの土台になる「Scene」を作って、ピンボールの枠を四角オブジェクトで組み立てる。崩されるブロックオブジェクトを作って配置してみた。せっかくなので3D雪だるまも置いてみた。ボールを跳ね返す棒(バー)っていうのかな、長方形のバーを配置して、長方形オブジェクトがキーボードの[←][→]キーで左右に動くようにVC#のスクリプトを書く。

長方形オブジェクト(バー)が左右に動くVC#のスクリプトがこれ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using TMPro; // Rich Text
using UnityEngine.SceneManagement; // for Restart
public class Controller : MonoBehaviour
{
public float fltAccel;
public GameObject Ball;
[SerializeField] public TextMeshProUGUI txtRestQty = null;
[SerializeField] public TextMeshProUGUI txtStartAndFinish = null;
[SerializeField] public TextMeshProUGUI txtBallQty = null;
private Rigidbody rb;
private float diff;
private bool keep = false;
private int intBall = 0;
// 初期設定
void Start()
{
rb = GetComponent();
intBall = 10;
txtStartAndFinish.text = "Start, press [z]";
}
// メインループ。この関数を繰り返す。
void Update()
{
rb.AddForce( transform.right * Input.GetAxisRaw("Horizontal") * fltAccel * 2, ForceMode.Impulse );
if ( Input.GetKeyDown(KeyCode.Space) )
{
if ( keep == false )
{
keep = true;
rb.AddForce( transform.forward * 3 * fltAccel, ForceMode.Impulse );
StartCoroutine( DelayMethod(0.2f, () =>
{
rb.AddForce( transform.forward * -3 * fltAccel, ForceMode.Impulse );
keep = false;
}));
}
}
// バーがボールに当たったら反動で少し後ろに動き、その後、元のY座標に戻る。
if ( rb.position.z < -14.0f)
{
diff = rb.position.z + 14.0f;
rb.position = transform.position - new Vector3(0,0,diff);
}
if ( Input.GetKeyDown(KeyCode.E) )
{
Instantiate(Ball, rb.position, Quaternion.identity);
txtStartAndFinish.text = "";
}
// [Z]キーが押されたら新しいボールを投入する。
if ( Input.GetKeyDown(KeyCode.Z) )
{
if ( intBall > 0)
{
Instantiate(Ball, rb.position, Quaternion.identity);
intBall--;
}
if ( Enemy.intCount <= 48 ) {
txtStartAndFinish.text = "";
}
}
// 再スタートは[S]キー。点数の初期化、ボールの数を初期化する。
if ( Input.GetKeyDown(KeyCode.S) )
{
SceneManager.LoadScene (0);
Enemy.intCount = 0;
}
txtRestQty.text = "Rest " + Enemy.intCount.ToString() + " pcs";
txtBallQty.text = "Ball " + intBall.ToString() + " pcs";
if ( Enemy.intCount <= 0 )
{
txtStartAndFinish.text = "You Win !!";
}
}
private IEnumerator DelayMethod( float waitTime, Action action )
{
yield return new WaitForSeconds( waitTime );
action();
}
}
オリジナルのプチゲームが完成した。重力が働き、重さを感じるピンボールになった。どうせならと[スペース]キーを押したら、バーを前に押し出してボールに勢いを付けて押し出すことができるようになったら面白いゲームになった。[Z]キーを押すと同時に何個もボールを投入できる。なかなか面白い。プログラムを読んだらバレちゃうんだけど[E]キーを押すと無限にボールを何個も投入できる。本来はデバッグ用なんだけど面白いから残しておいた。
さあ、完成したゲームをここのUnityハブで遊べるので試してみて欲しい。こんな素敵なゲームを1~2日で作れちゃうのだ。3Dブロック崩し