周回遅れですが、インディーズの有名ゲームFTLの動画を見まくっています。
凄い。このゲームモデル。
宇宙船同士でレーザーやミサイルで撃ち合えるのだけでなく、敵戦に乗り込んで攻撃できて、しかも敵も自分の艦に乗り込んでくる。
ドアをあけて真空を使って船内を消火したり、船員のクローンを作って、敵船の送り込んだり、
マインドコントロールで敵兵を拉致してぼこるなど、自由度が半端ない。
まさしく洋ゲーの鏡で、一本道で紙芝居で、絵の物量で勝負する和製ゲームに無いものが満載。
RTSでもあり、ローグライクと作者は定義しているらしい。
ゲームモデルに感動したので、できるところまで模写をしてみようと思う。
真似して仕組みを作っていくうちに、いろいろと勉強できる気がする。
しかも、この敵のAIの思考ルーチンがかなり作ってみたい!
まずは配列で定義した部屋情報を元に画面にキューブを表示しただけ。
次はこのマップをもとに経路探索できる処理を追加して、部屋と部屋の間で船員を移動させられるようにします。
using System.Collections; using System.Collections.Generic; using UnityEngine; namespace FTL { public class Main : MonoBehaviour { public int[,] map = new int[100, 100]; void Start() { string[] map2 = { "1111111", "1001001", "1001001", "1002001", "1111111" }; for (int i = 0; i < 100; i++) for (int j = 0; j < 100; j++) map[j, i] = 0; for (int i=0;i<=4;i++) { for(int j=0;j<map2[i].Length ;j++) { map[j, i] = int.Parse(map2[i].Substring(j, 1)); } } for (int i = 0; i < 100; i++) for (int j = 0; j < 100; j++) { if (map[j, i] == 1) SetWall(j, i,1); if (map[j, i] == 2) SetWall(j, i,2); } } void Update() { } void SetWall(int x,int y,int type) { GameObject pf; if (type == 1) pf = (GameObject)Resources.Load("FTL/Wall"); else pf = (GameObject)Resources.Load("FTL/Door"); GameObject gm = (GameObject)Instantiate(pf, new Vector3(x, 0, 99 - y), Quaternion.identity); gm.name = gm.name.Replace("(Clone)", ""); } } }
壁を薄くするだけで一苦労だよ(´・ω・`)