画像などを読み込むためのフォルダを追加する
野菜を追加しようと思いますが、野菜の画像はランダムで読み込むようにするため、スクリプトで読み込めるよう、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に設けたメソッドを実行し画像を設定する。
ということです。
問題無く製作できれば、実行すると以下のようにキャベツが表示されます。

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

コメント