目指せ☆!きふわらべが第5回電王トーナメント予選一位通過を狙う☆(*^~^*)<その2>

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「なんか 81個の 升ゲームオブジェクト を 並べるのも大変なんだが☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「マウスを使って ゲーム・オブジェクトを並べていては ダメなのよ!

C#スクリプトに並べさせなさい」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「どうやってだぜ☆?」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「升のプレファブを81個 どばっと作って、

あとは transform の position をいじるのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「プレファブって どうやって作るんだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「小春ちゃんに聞きなさいよ!」

 

\カタカタカタ!/

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「プレファブって どうやって作るんだぜ☆」

「プレファブの前に、

まず 元となる ゲームオブジェクトを作れだぜ」


            // 見えないようにゲームオブジェクトを作ります
            GameObject gameObject = EditorUtility.CreateGameObjectWithHideFlags("Prefab Source", HideFlags.HideInHierarchy,
                        typeof(SpriteRenderer),
                        typeof(Rigidbody2D)
                        );

「スプライトも C#スクリプトで貼り付けろだぜ」


                SpriteRenderer c = gameObject.GetComponent();
                c.sprite = FindSprite("sprite name");
// 中略
        // スプライトを取得
        // 出典: http://tsubakit1.hateblo.jp/entry/20131222/1387654182
        public static Sprite FindSprite(string spriteName)
        {
            return System.Array.Find(Sprites, (sprite1) => sprite1.name.Equals(
                // スプライト名。「ファイル名_セル番号(0オリジン)」
                spriteName
                ));
        }
// 中略
        // スプライト一覧
        static Sprite[] sprites;
        public static Sprite[] Sprites
        {
            get
            {
                if (null == sprites)
                {
                    // 出典: http://tsubakit1.hateblo.jp/entry/20131222/1387654182
                    // Resoucesからスプライト一覧を取得
                    // あとでスプライトを取得するのに使う
                    sprites = Resources.LoadAll("Sprites");
                }
                return sprites;
            }
        }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「プレファブは?」

「ゲーム・オブジェクトと、置くフォルダーを指定しろだぜ」


            // プレファブを作成します
            PrefabUtility.CreatePrefab(
                // プレファブの元の置き場へのパス
                string.Format("Assets/Resources/Prefabs/{0}.prefab", "prefab name"),
                gameObject);

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「なるほど……☆」


        // 元となるゲームオブジェクトは破棄します
        UnityEditor.Editor.DestroyImmediate(gameObject);

「一時的に作ったゲームオブジェクトは破棄しろだぜ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「サンキュー☆(^▽^)

やってみるぜ☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「うん☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「プレファブは作れたが、プレファブを シーン・ビューに

置くには どうしたらいいんだぜ☆?」

「インスタンスを作れだぜ」


        // プレファブのインスタンスを作成し、シーンに配置します
        void CreatePrefabInstance(string prefabName, Vector3 cellPosition) {
        // プレハブを取得
        string path = "Prefabs/" + prefabName;
        GameObject prefab = (GameObject)Resources.Load(path);
        Debug.Assert(null!=prefab, string.Format("path={0} 要確認:(1)プレファブは作成していますか? (2)スプライトをスライスしましたか?", path));
        // プレハブからインスタンスを生成
        GameObject prefabInstance = UnityEngine.Object.Instantiate(prefab, cellPosition, Quaternion.identity);
        // ゲームオブジェクトを入れた変数 go_prefabsRoot を作っておく
        prefabInstance.transform.parent = go_prefabsRoot.transform;
}

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「サンキュー☆

やってみるぜ☆」

 

はてなブックマーク - 目指せ☆!きふわらべが第5回電王トーナメント予選一位通過を狙う☆(*^~^*)<その2>
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です