こんにちは、ぬいぐるみです。
最近Unityで遊んでます。最近買ってよかったの技術書は「Unityの教科書 Unity 2022完全対応版」です。
- 開発環境の構築をMacもWindowsも両方書いてくれている
- 2022(最新のバージョンに対応)
- 実機転送など、プログラミング以外の部分についての解説もある
- Unity学習最初の一冊として最適
- 図と解説が豊富。目的や理由を解説しながらコードを書いてくれている
- 序盤のアプリが本当に簡単に作れる。一つのプロダクトを完成させられずプログラミングに挫折した経験のある人にこそ読んでほしい。
なので、サンプルアプリをぽちぽちと作っていたのですが……、この本を読みながらサンプルアプリを作っているとどうしても思うことがあります。
それは「(序盤のサンプルアプリは)物足りない」です。
初心者向けに書いてあり、段階を踏んでゲームを作っていく関係上、どうしても最初のアプリは内容が薄いです。
この記事は
もうちょっと踏み込んだルーレットアプリにしたい、でもどうやって改造したらいいんだろう。とか
教科書と同じようにコードを写経するだけでは「ちょっと物足りない」と思った人向けに、「こういう風に改造したらどうですか?」「こういうコードで実現できるっぽいですよ。(最適解は他にも有るだろうけれど)」という内容を書いています。
※コードを実行する場合はあくまでも自己責任でお願いします。私の環境では一応問題なく動いています。
上記の本を買った前提で記事を書いているので、不親切なところ(開発環境構築とか、丁寧なコードの解説とか、変数の意味とか)は本を買ってぜひ読んでください。
3「占いルーレット」を魔改造する。
ここを改造したいポイント
本で解説されているアプリだと「ワンクリックでルーレットの開始から停止まで処理してしまう」ルーレットなのでやっぱり自分で止めたいですよね。今のままだと目押しできないのでできるようにしましょう。
こういうふうに改造するよ
1クリック目 ルーレットスタート
2クリック目 ルーレット停止
将来的に「もう一回回す」ボタンを実装したいと思うので、3回、4回押しても回らないようにしたい。
良ければ一度ここで止まって、自分で書いてみてください。この下には私が動かしたコードを乗せています。
実際のコード
本に書いてある素材の再配布はよろしくないと思ったのでルーレットの素材を作りました。(勢い余って二種類作りました。)
Roulette.png
「再配布」「直リンク」のみ禁止でお願いします。それ以外の利用は常識の範囲内でどうぞ。
Roulette.pngにRouletteControllerをアタッチ。
RouletteControllerは以下のように改造しました。私はプログラミング初心者なので「とりあえずこれでやりたいことは実装できたよ」という感じですがもっと良い回答があると思います。思いついた方はコメント欄で教えて下さい…。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class RouletteController : MonoBehaviour { float rotSpeed = 0; int countClick = 0; // Start is called before the first frame update void Start() { Application.targetFrameRate = 60; } // Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)) { switch (countClick) { case 0: //初回クリック(ルーレット動き出し時の判定) this.rotSpeed = 10; countClick += 1; break; case 1: //2回目クリック(ルーレットを止めるときの判定) countClick += 1; break; default: break; } } if (countClick >= 2) { //減速する処理 this.rotSpeed *= 0.80f; } transform.Rotate(0, 0, this.rotSpeed); } }
※ルーレットの動かす、止めるという処理はUnityの教科書 Unity 2022完全対応版3章のスクリプトを参考に作成しています。
フローチャートも書いてみました。縦長です。
結果
無事に動きました。一回目のクリックで動き始めて、二回目のクリックで止まってます。その後連打しても動きません。
今後やりたいこと
- ルーレットが刺した場所によって違う結果を表示
- リザルト画面の実装
- もう一度回すボタンの設置
- 結果が出たときに楽しげな音を鳴らす。
飽きなかったら続き書きます。
他にも「こういう改造できないかな」というネタや「こういう別解も有るよ」というご意見が有りましたらお気軽にコメント欄にどうぞ。
Unityの教科書、本当にいい本なのでおすすめです。
今までプログラミングに挫折し続けてきた人こそ読んでほしい一冊です。