Unityで何かを作ってみる その3

Unity

画像などを読み込むためのフォルダを追加する

野菜を追加しようと思いますが、野菜の画像はランダムで読み込むようにするため、スクリプトで読み込めるよう、ResourcesフォルダにImagesフォルダを作成し、中に野菜の画像を格納します。
今回はまず、cabbage(キャベツ)とtomato(トマト)の2個格納しました。

野菜の画像を読み込むPrefabを作る

野菜は共通のPrefabに野菜の画像を読み込む形で作りたいと思います。

ResourcesフォルダにPrefabsというフォルダを作り、VegetableSpriteというPrefabを作成します。
VegetableSpriteは、2D Object のSpriteをPrefabにしたものです。
GameObjectにSpriteRenderer、Rigidbody 2Dを追加します。Colliderは画像が読み込まれてから追加しますので、ここでは追加していません。


VegetableSpriteというクラスファイルを作成し、画像のセットの処理や、各コンポーネントの参照を持たせておきます。
今回はとりあえずの処理で、キャベツの画像のみ読み込む形にしています。
VegetableSprite.cs

using UnityEngine;
namespace VegetableTower.Prefabs {
    public class VegetableSprite : MonoBehaviour {
        [SerializeField] SpriteRenderer _sprite;
        [SerializeField] Rigidbody2D _rigidbody2d;
        public Rigidbody2D Rigidbody2d {
            get {
                return _rigidbody2d;
            }
        }
        public void SetImage() {
            _sprite.sprite = (Sprite)Resources.Load("images/cabbage", typeof(Sprite));
        }
    }
}

ここでのポイントは参照の持たせ方かと思います。
クラス側にgetterで参照を持たせることで、getComponentしなくて良くなるので、私はこのようなスタイルで作成しています。
このスクリプトを追加して、コンポーネントの参照を設定しておきます。

GameManagerを追加する

ゲームの根幹を設定するマネージャークラスを作ります。
このクラスで野菜を生成し、設置します。空っぽのGameObjectを作成し、GameManagerのクラスを追加します。

GameManagerの処理を書く

GameManagerクラスに、起動時に野菜を表示する処理を書きます。
GameManager.cs

using UnityEngine;
using VegetableTower.Prefabs;
namespace VegetableTower.Managers {
    public class GameManager  : MonoBehaviour {
        void Start(){
            CreateVegetable();
	}
        //野菜を生成する
        void CreateVegetable(){
            //prefabを取得
            VegetableSprite prefab = (VegetableSprite)Resources.Load("Prefabs/VegetableSprite", typeof(VegetableSprite));
            //インスタンスを生成
            VegetableSprite obj = Instantiate(prefab) as VegetableSprite;
            obj.transform.position = Vector3.zero;
            obj.Rigidbody2d.gravityScale = 0;
            obj.SetImage();
            //画像を読み込んでから、当たり判定を追加
            obj.gameObject.AddComponent<PolygonCollider2D>();
        }
    }
}

ここでやっていることは、Prefabを読み込んで、画面に追加し、Prefabに設けたメソッドを実行し画像を設定する。
ということです。
問題無く製作できれば、実行すると以下のようにキャベツが表示されます。

次回は、キャベツを回転させたり、落としたりします。

Unity
スポンサーリンク
northprintをフォローする
おおよそ北の方向から

コメント