今日やったこと
一定時間ごとにアイテムが降ってくるようにした
当たり判定を付けた
Prefabを使う
以前にUnityちゃんを動かした時もやったんですが、完全に忘れていました。
まあ最後にUnityを触ったのが5ヶ月くらい前なので、そりゃあ忘れてるわなって思いました。
インスタント生成のソースコードはこんな感じになりました。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PotionManager : MonoBehaviour { // Start is called before the first frame update void Start() { InvokeRepeating("makePotion", 0.0f, 1.0f); } // Update is called once per frame void Update() { } private void makePotion() { GameObject potion = (GameObject)Resources.Load("OrangePotion_lv1"); //インスタンス生成 Instantiate(potion, new Vector3(Random.Range(-5, 5) + 0.5f, 3.5f, 0.0f), Quaternion.identity); } }
空のGameObjectを作って、そこにScriptを貼り付けて自動生成させました。
あんまりスマートじゃない気がするんですが、みんなそうやってるみたいなのでとりあえず考えないことにします。
当たり判定
今日一番時間がかかったのが当たり判定です。
Rigidbody2DがついていないとOnCollisionEnter2Dが呼ばれないということを知らなくてずっと悩んでました。
アタッチできてないのかなと思って何度もPrefabを作り直していました。
当たり判定のコード
using System.Collections; using System.Collections.Generic; using UnityEngine; public class HitPotion : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } private void OnCollisionEnter2D(Collision2D collision) { Debug.Log("ぶつかりました。削除します"); Destroy(this.gameObject); } }
先日作った落下してくるポーションの動きを制御するPotion.csに当たり判定のコードを追加しようと最初は思ったんですが、Unityでは当たり判定とかのスクリプトは別ファイルに分けるのがいいらしいので分けて書きました。
Unityでは一つのオブジェクトに複数のスクリプトファイルを追加できるので、こういう汎用性のあるものは使い回しができるように分けた方がいいよ。ってことなんだと思います。たぶん。
今後の目標
12月21日にUnity1weekという1週間でゲームを作るイベントがあるのですが、それに参加したいと思っています。
そのためにも毎日Unityに触って慣れておきたいです。
できればUnity1week前にミニゲームを一つ完成させて、Unityでのゲーム作りの流れを掴んでおきたいです。
それでは。