Unity 自作タイルマップシステム進捗

最近はライト周り作ってた

タイルマップの明るさを設定
明るさを変えるには、1つだけでもグリッド(2ポリゴン*4オートタイル*16*16)のUV値を変更しなければならないので、そこそこ重い。
設定は、UV値のYの整数部を使ってシェーダーに渡した。
アニメーションでXの整数部を使ってる。
Mesh.SetUVsを使えばVector4も渡せるらしいけど。











タイルマップ用のライト
ライトの情報はUnityが勝手に8個まで渡してくれるのでそれを使った。
タイルごとに照らせるように、ピクセルシェーダで調整してる。
CPUは使わないのでPCだと全く気にならないくらい軽いけどモバイル端末のピクセルシェーダは機種によるかもだけど、かなり弱いので少しでもここで計算するとFPSが下がる。
AmazonのFireタブレットで60FPS出るように調整した。
シェーダーのコード
normal使っていないからそこにどこの頂点か判別できる情報入れておけば、すべて頂点シェーダで処理できそう









タイルの明るさとライトを両方使った。
炎が多く壁にヒットするとFireタブレットだと少しFPSが落ちる 。
炎60*海老30の当たり判定も結構重いので、どちらか一方だけならFPS60保てそう。
明るさの変更を別のコアで処理することもできると思うUV値の変更だけはメインコアでやらないとだけど。









実装済み
 広さ制限のないタイルマップ
 オートタイル
 レイヤー
 ゲームプレイ中のタイル変更
 オブジェクトプールによる高速化
 タイルアニメーション
 タイルの明るさ設定
 タイル用のライト 1つのグリッド(16*16)につき8つの光源まで対応
 タイルパレット作成用エディタ拡張(出来が悪い)
 タイルとの当たり判定(すり抜けしないけど重め。斜めに押し戻すのが面倒だったため1軸 のみの移動。斜めに移動するには1軸ずつ動かす。)
 オブジェクト同士の当たり判定
追加11/3
 何もないタイルを頂点シェーダで処理(discardが使えないため頂点のxを0に)
追加11/-
 タイルマップのセーブロード(セーブロードeditor,pc,android ロードwebgl)

まだ実装してない実装したい
 オブジェクト同士の当たり判定 軽量化
 部屋と通路のダンジョン生成

12/29 githubで公開しました
https://github.com/ebicochineal/E512TileMap









コメント