Exception[0]

UnityとかPHPを使って色々やるとかやらないとか

【Unity】タクティクスSRPGぽいものを作ろう! - ①マップチップを配置しよう!

前回からちょっと間が空きましたあがいです、こんばんわ。

さて、今回は前回の告知通りにタクティクスぽいSRPGを作っていきます。

SRPGといっても今回はあくまで戦闘部分のみ、を作ります。


f:id:acguychan:20140921042759j:plain

目指せ魔人学園!!

※今回は前回と違いスクリプトを扱う部分が多くなります。なので、C#を多少勉強しておくと理解がスムーズになるかもしれません。


タクティクスといえば、マス目から。今回はマップチップを配置しようと思います。


事前準備に、Projectのフォルダをこのような構成で作っておきます。

f:id:acguychan:20140921043307j:plain

Scripts/Battle 内にBattleBase,BattleMainの2つのスクリプトファイルを作ります。

f:id:acguychan:20140921043501j:plain

BattleMain内のスクリプトの以下を追記。

public class BattleMain : BattleBase {

  protected int _sceneTask;

  // Use this for initialization
  void Start () {
    // 配置するプレハブの読み込み 
    GameObject prefab = (GameObject) Resources.Load("Objects/GrassTile");
    // 配置元のオブジェクト指定 
    GameObject stageObject = GameObject.FindWithTag("Stage");
    // タイル配置
    for(int i = 0; i < 7 ; i ++) {
      for(int j = 0; j < 7 ; j ++) {

        Vector3 tile_pos = new Vector3(
            0 + prefab.transform.localScale.x * i,
            0,
            0 + prefab.transform.localScale.z * j
            
          );
        
        if(prefab != null){
          // プレハブの複製 
          GameObject instant_object =
            (GameObject) GameObject.Instantiate(prefab,
                                                tile_pos, Quaternion.identity);
          // 生成元の下に複製したプレハブをくっつける 
          instant_object.transform.parent = stageObject.transform;
        }
      }
    }
  }
  
  // Update is called once per frame
  void Update () {
  
  }
}

BattleBase はそのままで大丈夫です。


次に、Hierarchyで図のように配置します。
f:id:acguychan:20140921045525j:plain

空のGameObjectのCommonを作り、その下に同じく空のGameObjectのGameManagerを配置。
空のGameObjectのLightを作り、その下にDirectional lightを作り配置。
空のGameObjectのCameraを作り、その下にMain Cameraを配置。

空のGameObjectのStageを作り、Inspector/TagでStageを指定。
f:id:acguychan:20140921050133j:plain

※Tagの追加の仕方
※TagからAdd Tag..を選びElement~~にStageを追加。

GameManager内に先ほど作った Scripts/Battle/BattleMainを追加する。
f:id:acguychan:20140921052626j:plain


これでマップチップの生成準備が整ったので次はマップチップの方を作ります。


Materials/Tileの中に、新規MaterialのGrassMaterialを作ります。
f:id:acguychan:20140921050757j:plain

※後々使いそうなので何種類かマップチップ作ってます。
※Texturesフォルダの中にはMaterialで指定するテクスチャファイルを入れて下さい。

Resorces/Objectsの中に、空のGameObjectのGrassTileを作ります。
f:id:acguychan:20140921051237j:plain

※マップチップとなるので、Scaleは控えめにするといいかも

GrassMaterialに好きなテクスチャを張って(うちは草画像にしてます)GrassTileに追加します。


これで準備が整いました、実行します。

f:id:acguychan:20140921051419j:plain

こんな感じに配置されたでしょうか?

BattleMain内のfor文の7が現在配置しているマップチップの数、Resources.Load("Objects/GrassTile")が読み込んでいるマップチップとなるので、
これをランダムや好きなように変えてみるとどんな風に配置されていくのがわかると思います。



さて、次回はカーソルでマス目を指定する所からやっていきます。