09 «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.» 11

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【Unity】ResourcesフォルダからInstantiateしてます?意外と便利っすよね? 

午前中は昼過ぎまで打ち合わせ、午後は仕様検討の会議してたらこんな時間になってしまいました!
坂内っす。

現在本格育成シミュレーションゲーム制作中です。
何が本格かって?
放置育成じゃないっすよ?それだけなんですけどね。

で、本日の話題ですが、みなさんオブジェクトをInstantiateするときって、ふつうにPrefabをPublicとかにくっつけて、Instantiateしてます?
俺はずっとそうやってました。

でもInstantiateするオブジェクトが多岐にわたる場合とかめんどいっすよね。

って時に、ReosourcesフォルダからInstantiateしちゃえるらしいっす。

例えば、以下のようにResourcesフォルダにPrefabを置いておきます。
今回はCubeというPrefabを用意しました。


んで、なんか適当にPrefabをInstantiateしてみます。

using UnityEngine;
using System.Collections;

public class PrefabTest : MonoBehaviour {

const string DIR_CUBE_PREFAB = "Prefabs/";
const string NAME_CUBE_PREFAB = "Cube";
readonly Vector2[] RANDOM_POSI = {new Vector2(-5f,-10f),new Vector2(5f,10f)};
const float POSI_Z = 20f;

void Start () {
// Cube生成
for(int i = 0 ; i < 5 ; i++){
GameObject cube =
Instantiate(Resources.Load(DIR_CUBE_PREFAB + NAME_CUBE_PREFAB))
as GameObject;
float x = Random.Range(RANDOM_POSI[0].x,RANDOM_POSI[1].x);
float y = Random.Range(RANDOM_POSI[0].y,RANDOM_POSI[1].y);

cube.transform.localPosition = new Vector3(x,y,POSI_Z);
}
}
}


こんな感じで実行すると、こうなります↓


もちろんランダムなので、実行の度にCubeの場所が変わります。

GameObject cube = Instantiate(Resources.Load(DIR_CUBE_PREFAB + NAME_CUBE_PREFAB)) as GameObject;
の場所ですが、もちろん以下でもおk!

GameObject pref = Resources.Load(DIR_CUBE_PREFAB + NAME_CUBE_PREFAB);
GameObject cube = Instantiate(pref) as GameObject;

Resources.Load(Prefabの場所と名前);

で、できるようっす。

これで、prefabの名前に0とか10とかつけて、ランダムのオブジェクトが生成できるってことっすね。

あ、ちなみにこうやってInstantiateした時でも、Resources.UnloadUnusedAssets()とかで、リソース解放しないとダメなんですかね?

リソース解放まわりよく分かっていないんですよね・・・・・どなたか教えて頂ければ幸いです!

え?今頃こんなネタ書くなって?すいません

ネタ探しの旅に出ますorz アデュ~ノシ
スポンサーサイト

Category: 開発日記(Unity)

Tag: Unity 
tb 0 : cm 0   

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://halcyonsystemblog.blog.fc2.com/tb.php/146-71d74f05
この記事にトラックバックする(FC2ブログユーザー)