スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2016年は……

進捗ダメでした!!!!

1日24時間のうち、7時間を睡眠に費やし、10.5時間を換金しても……6.5時間あるじゃないか!
というのは極論ですが。

2020年までに完成させるという目標も、累卵の危うきにあります。
書かねば! 描かねば!!
スポンサーサイト

Unityでマップを自動生成する(その1)

外部に定義したマップファイルから、全体マップと戦域マップを自動生成する機能(一部)を実装しました。
外国産戦略シミュレーションゲームでは、画像ファイルから世界地図を自動生成するというような機能はよく見られます(パラドゲーなど)。
しかし、今作っているのは宇宙空間を舞台にしたものなので、本来、陸地や海といった行動できる範囲とできない範囲が分かれているということは考えにくいのが実態です。それでもなぜこの機能を実装したかというと、ひとえに「回廊の戦い」をやりたいから。これに尽きます。もっと言うと、ユーザが魔改造して勝手な地形を自由に生成して遊べるようなスケーラビリティを持たせたかったということもありますが。

実際にどんな処理をするかというと、大体次のような手順になります。
  1. 全体マップから戦域に相当する小領域を抽出
  2. 航行不能領域の膨張処理
  3. 同エッジ抽出
  4. エッジを元に頂点情報を生成
  5. 拡大戦域マップの作成(線引きおよび内挿補完)
エッジ抽出のために1ピクセル膨張処理を行っている特性上、隣接した孤立点があると正しくマップを生成できないのがこのアルゴリズムの不満点であり不完全な点ではありますが、そこはバリデータか何かを作って解決するようにしたいと思います。もちろん、これはゲーム起動時に自動チェックされるという前提で。

最後に実行結果です。

戦域マップ用のベース小領域20141201_1.png
ちなみにこれ、黒以外に色分けの意味はありません。

自動生成された戦域マップ
20141201_2.png
正しく実装されていることがわかります。まぁ、元のピクセル数が低い(11*11px)だけに、お世辞にも味のある戦域マップとはいえないですね。

オマケ

20141201_3.png

やっぱりこれくらいの大きさの、しかもこういう地形だと胸が熱いですね!! 単縦陣一航過で敵泊地に殴り込みをかけたくなります。

次回は、宇宙空間との合成と、航行不能領域の具体的なビジュアライゼーションを実装する予定です。早めにできるといいが……。

Unityで外部画像ファイルからスプライトを生成する

首記のとおり、Unityで外部フォルダの画像からスプライトを生成する方法の備忘録です。

今作っているゲームの場合、ユーザが作成した定義ファイルや、キャラクタの画像を必要に応じてスクリプト側から自動生成・解析できるようにする必要があります。
というわけで、_DataフォルダやAssetフォルダの外に定義したフォルダから、PNGを読み込んでテクスチャを作成、作成したテクスチャを用いてスプライトを作成するコードを書きました。
以下、C#のソースコードとインスペクタです(もともと戦場を動的に生成するために作ったので、クラス名がDefine Theaterとなっています)。
C#
using UnityEngine;
using System.IO;

public class DefineTheater : MonoBehaviour {
    private SpriteRenderer sr;
    void Start () {
        this.sr = this.gameObject.GetComponent<SpriteRenderer>();
        Texture2D texture = ReadTexture (".\\Graphics\\Character\\atc054.png", 90, 110);
        Sprite createdSprite = Sprite.Create (texture, new Rect (0, 0, 90, 110), new Vector2 (0, 1), 1);
        this.sr.sprite = createdSprite;
    }

    private Texture2D ReadTexture(string path, int width, int height){
        byte[] readBinary = ReadPngFile(path);
        Texture2D texture = new Texture2D(width, height);
        texture.LoadImage(readBinary);
        texture.filterMode = FilterMode.Point;
        return texture;
    }

    void Update () {
    }
}
実行結果
1対1でピクセルを対応させるために、Sprites/Defaultシェーダを設定したオブジェクト(Pixel Perfect)を作成して取り付けています。Pixel Perfect内では、Pixel snapにチェックを入れているだけです。
20141106_1.jpg 20141106_2.jpg
20141106_3.jpg 20141106_4.jpg

AT開発進捗 #2

前回からだいぶ時間が経ちました。

以前書いた通り、なかなか制作に時間を割けないでいる訳ですが、下のIFF表示のように、素材を少しずつ作ってはいます。

こちらもチーム銀翼の顰みに倣う、という訳ではないですが、小分けにして戦術フェーズを作った方がいいかもしれません。せっかくUnityなんだし。

以下、余談。
制作とはあまり関係ない近況報告のようなものなので、追記です。

続きを読む

AT開発進捗 #1

Mac Book Pro買いました(どうでもいい)。
そしてそのMBP、買ったときにちょっと不良みたいなものがあって、交換してもらう予定です。

さて、Unityを使い始めて一ヶ月程度たちましたが、実はあまり開発は進んでいません。
時間をあまりとれていないというのが最大の理由ではありますが、それと同時に、実装しながら基本的な使い方を学習しているという段階です。
まあ、まだまだUnityでは何ができて、何はできなくて、何が得意で、何が不得意なのか……、そういうツールの性質を探っているわけです。

とはいえ1ヶ月たって何もないというのもダメ過ぎるので、作ったゲームの画面を本当にちょっとだけあげておきます。

20140713_1.jpg



以下、余談。

……開発の手順って悩みます。
一つのビデオゲームおいて、最もウェイトを占める要素は何かと考えると、それは当然画像であったり、音楽であったりという素材部分であるということは、言を俟たないと思います。従って、完全に参照するだけの素材(キャラクタ画像等)といったものは本当に最後に作ればよい。
しかし、素材とゲームの機能が一体化されいてるGUI周りはそうもいきません。
例えばボタンを実装しようとしたとき、ダミーの画像を用意して、イベント・リスナー・画面遷移等のスクリプトを組む。機能としてはこれでおしまいです。
ところが今時のビデオゲームってそれだけでは無味乾燥にすぎて、動きやエフェクトがないと綺麗じゃないし雰囲気も出ない。
GUIベースなんだけど、アプリケーションというよりはOSとか、ツールみたいな印象を受けます。
だからインタフェース周りを実装するときは、素材・機能・エフェクトを同時に作りたい。
しかし、それをすべて同時に作ってしまうと進捗があまり出せない。ならいっそ、最低限の機能だけを与えておいて、必要に応じて機能をデプロイできるようにスクリプトを組むべきか……とかね。

その他にも、SFっぽいんだけど歴史物みたいな雰囲気を出すためにはどんなフォントがいいかなとか、この素材のライセンスは大丈夫だろうかとか、考えることが本当に多いです。
sidetitlePROFILEsidetitle
AUTHOR: かいのしずく


詳しい自己紹介ページ
本棚(ブクログ)
平成20年以降にチェックしたのすべての本
本棚(読書メーター)
各月の読了ページ数管理用
チームカチューシャ
同人ゲームサークル MATRICES

sidetitleINFORMATIONsidetitle
VISITORS
CALENDAR
09 | 2017/10 | 11
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 - - - -
SEARCH
RECENT ENTRIES
CATEGORIES
ARCHIVES
sidetitleLINKsidetitle
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。