前回は、売却ボタンの作成と、羊毛(Wool)の売却処理を実装しました。
前回の記事↓
今回は羊オブジェクトの生成・移動処理をメインで作っていきます。
改めてクリッカーゲームのルール設定について
さて、もう5回目となりちょっとずつ要素がそろってきました。
ここで一つ、どのようなゲームにしていくのかもうちょっとだけ具体的に決めておきます。
クリッカーゲームと言えば、1クリック当たりの報酬(金額・今回で言うと羊毛(Wool))もお金を消費して増やすことが出来、どんどんと金額がインフレしていくのが特徴です。
今回は一風変わったクリッカーゲームとして
- 購入することで羊をどんどん増やすことが出来る
- 色違いの羊は色違いの羊毛が取れ、高く売れる
- 羊毛を刈り取られた羊は裸になるが、一定期間で毛が復活してまた刈り取れるようになる
というルールにします。 すなわち
- 羊を購入して追加
- 羊をクリックして羊毛を溜める
- 羊毛を売却してお金を貯める
- より高い羊(色付き)が買えるようになる
- 1.へ繰り返し
のサイクルにしたいと思います。
羊オブジェクトの生成 クリックアイテムを作る処理
それでは、羊生成処理を作っていきます。
SheepGenerator作成
まず、「羊を生成」を役割とする「SheepGenerator」を作ってしまいます。
HierarchyでCTRL+SHIFT+Nでオブジェクトを新規作成し、スクリプトも新規で追加をします。
- 名前:SheepGenerator
- 新規スクリプト名:SheepGenerator
上記のように設定をし、
SheepGeneratorスクリプトを修正していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SheepGenerator : MonoBehaviour { [SerializeField] private Sheep sheepPrefab; //生成する羊のPrefab //羊作成 public void CreateSheep() { var sheep = Instantiate(sheepPrefab); } void Update() { if (Input.GetKeyDown(KeyCode.S)) { CreateSheep(); } } } |
変数sheepPrefabをSerializeFieldで宣言して、InspectorでSheepオブジェクトのPrefabをセット出来るようにし、CreateSheepメソッドでは、(とりあえず)sheepPrefabをInstantiate(生成)だけしています。
ただ、このままでは確認が出来ませんので、Update関数内で
if (Input.GetKeyDown(KeyCode.S)) とし、キーボードの「S」が押されたかどうかを判断し、押されている場合は
CreateSheep();
羊を実際に生成するようにしています。
では、保存をして、Unity Editor上、InspectorでAssets/Prefabs/Sheepプレハブをセットして、再生してみましょう。
Sキーを押すたびに羊が生成されます。
が、場所が同じ場所ですね。いきなり画面に表示されるのもそもそもかっこ悪いので、画面の外で生成して、移動するようにします。
ついでに、今は羊をクリックすると毛が刈られた絵に差し替わるのですが、ずっと刈られたままです。これも何とかしましょう。
羊の移動処理 画面の端から端までオブジェクトを動かすスクリプト
Hierarchyのsheepオブジェクトを選択し、InspectorからSheepスクリプトをダブルクリックして以下のように編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Sheep : MonoBehaviour { [SerializeField] private SpriteRenderer sheepRenderer; [SerializeField] private Sprite cutSheepSprite; [SerializeField] private Wool woolPrefab; //最初の羊の画像 private Sprite defaultSprite; //移動速度 private float moveSpeed; //初期化処理 private void Initialize() { sheepRenderer.sprite = defaultSprite; transform.position = new Vector3(5,0,0); //初期位置をセット moveSpeed = -Random.Range(1.0f, 2.0f); //移動速度をセット } // Start is called before the first frame update void Start() { defaultSprite = sheepRenderer.sprite; Initialize(); } // Update is called once per frame void Update() { transform.position += new Vector3(moveSpeed,0) * Time.deltaTime; } private void Shaving() { sheepRenderer.sprite = cutSheepSprite; var wool = Instantiate(woolPrefab, transform.position, transform.rotation); } private void OnMouseOver() { if (Input.GetMouseButton(0) == false) return; Shaving(); } } |
では解説していきます。
まず、カット前のSpriteを保持するための変数 defaultSprite
と
移動速度用の変数 moveSpeed
を用意しています。
16 17 18 19 20 |
//最初の羊の画像 private Sprite defaultSprite; //移動速度 private float moveSpeed; |
次に、初期化用メソッド Initialize
を用意して画像の初期化(毛がある状態に)と、初期位置のセットと、moveSpeedのセット(-1.0f~-2.0fの間のランダム)をしています。
22 23 24 25 26 27 28 |
//初期化処理 private void Initialize() { sheepRenderer.sprite = defaultSprite; transform.position = new Vector3(5,0,0); //初期位置をセット moveSpeed = -Random.Range(1.0f, 2.0f); //移動速度をセット } |
そして、Startメソッド内では羊の最初の画像(毛がある状態)の退避と、用意した初期化用メソッド Initialize();
を呼んでいます。
31 32 33 34 35 |
void Start() { defaultSprite = sheepRenderer.sprite; Initialize(); } |
Updateメソッドでは、用意した移動速度用の変数moveSpeed
を使って、羊オブジェクトの位置を移動させています。
また、この時 Time.deltaTime
をかけることで、フレームレートに移動速度が依存しないようにしています。
38 39 40 41 |
void Update() { transform.position += new Vector3(moveSpeed,0) * Time.deltaTime; } |
では、保存をして、UnityEditorで再生をしてみましょう。
最初からシーンに配置されているSheepオブジェクトも画面外から移動してきますし、Sキーを押すたびに生成されるSheepオブジェクトも画面外からランダムの即で移動してくるようになりましたね!
おさらいと次回予告
今回は羊オブジェクトの移動処理と生成処理を作りました。
次回はこの羊オブジェクトの初期データを作っていきます。
次回の記事↓
コメント