スキップしてメイン コンテンツに移動

投稿

2018の投稿を表示しています

noriko 1.6.0にバージョンアップ

先程norikoのバージョンを久々にアップしました。

Bitbucket:
https://bitbucket.org/arlez80/noriko
Haxelib:
https://lib.haxe.org/p/noriko/1.6.0

主な追加はnoriko.str.HTML.toPathValueの追加です。これは、HTMLテキストを{path:"/path/to", value:"value"}の配列に変換する関数です。
タグ閉じ忘れの文章でも解析できるようになっています。
以前はタグを切り出す関数がありましたが、全てdeprecatedにしました。(消すつもりはありませんが、機能追加はもうありません)

ぐるんぐるん

今、ぐるんぐるん(仮)という名前のゲームを作っています。
いわゆる、6DoFでの空間上で撃ちあいをするゲームになっています。Godot Engineの練習3作目として作っています。

Godot Engineの練習として以下の機能を実装する予定ではありますが、調べながらなので何時実装になるかはわかりません。

・ネットワーク対戦
・洞窟ステージ
・軽量化(GridMap + Lightをなんとか良い感じで使いたい)

LightはBakeできるハズなんですが、やるとエディタごと落ちるのでちょっと要調査です。

Godot Engineでローカライゼーション

Godot Engineでローカライゼーションする方法について。

ドキュメントにはスクリプトを使う方法とタイトルを変更する方法、リソースを変える方法は乗っているんですが、スクリプトを使わずにGUIノードのローカライズをする方法が乗っていなかったのでDiscordで聞いてきました。
テキストの準備 UTF8エンコーディングのcsvを用意します。下記のような感じで書いていきます。
,jaJP,en KEY_HELLO,こんにちは,hello 読み込んでおく Project > Project Setting > ローカライズタブ > 追加...でCSVのフォルダにある*.translationを追加する。
ここで、*.csvを指定すると上手く動きません。ちょっとハマりました。 適応する スクリプトを使う方法 下記コードでOKです。 tr("KEY_HELLO") GUIの文字列に対してスクリプト使わない方法 今回の本題。実はなにもしなくても、デフォルトで変換されます。 GUIノードのTextプロパティにキー(上のCSVの場合は、KEY_HELLO)をそのまま指定するだけで大丈夫でした。
どうやら当初言語指定が間違っていたみたいで(Fallbackの指定がja_JPなのに、csv上はjaとしか書いていなかった)、動いていなかったようです。
タイトルを変える方法 こちらも、キーのみを記述すればタイトルが変わります。

Godot シェーダーの 最初の2つのメモ

Godotでシェーダー書いたのですが、忘れないようにメモ。

最初の二行に書く、シェーダーの設定について:

shader_type spatial;
render_mode unshaded;
shader_type シェーダーのタイプ。

spatial3Dcanvas_item2Dparticlesパーティクル向け
render_mode
blend_mixデフォルトblend_add加算合成blend_sub減算合成blend_mul乗算合成depth_draw_opaque不透明のみDEPTHバッファに書き込みdepth_draw_always常に書き込みdepth_draw_never常に書かないdepth_draw_alpha_prepass半透明ジオメトリ用に先に不透明を書き込むdepth_test_disableDEPTHテストやらないcull_front表面非表示cull_back裏面非表示cull_disabled両面描画unshadedライト/陰をオフにする。ALBEDOがそのまま画面に出るようにするdiffuse_lambertdiffuse_lambert_wrapdiffuse_oran_nayardiffuse_burleydiffuse_toonspecular_schlick_ggxspecular_blinnspecular_phongspecular_toonspecular_disabledskip_vertex_transformvertex shaderでVERTEX/NORMAL(他)のTransformを手動でやるようにするworld_vertex_coordsVERTEX/NORMAL(他)で、ローカル座標のかわりにワールド座標を使用するvertex_lighting頂点ごとのライティングを使用する
Godot Engineでぐるんぐるん(仮)作るの楽しいです。

Godot 溶岩シェーダー

Godot Engineで溶岩シェーダーを書きました。
https://bitbucket.org/arlez80/godot-magma-shader/src
ぐるんぐるんの炎魔法用なので、ホントは溶岩ではないのですが、たぶん溶岩用に使うのが一番使いやすいと思います。
(動いているものはツイートしてます。こちらで確認できます。)
溶岩自体の色は赤で固定ではありません。シェーダーの引数にcolorというのがあって、それにGradientTextureを指定すると良い感じで色を変更できます。

Godot Maze Generator公開しました

ぐるんぐるんするゲーム、ぐるんぐるん(仮)を作っています。
そこで、自動で3Dダンジョンを生成するプログラムを作ったのですが、それだけを切り離して公開しました。

https://bitbucket.org/arlez80/godot-maze-generator

部屋を分離してダンジョンを生成します。あとはGridMapなんかを使ってダンジョンを3Dモデル化して使います。

生成したマップのサンプル:

こんな感じになります。

Godot MIDI Player作りました

GodotでMIDIファイルを再生できる Godot MIDI Playerを作りました。

https://bitbucket.org/arlez80/godot-midi-player

なにこれ Godot Engine 3 向けのライブラリです。SoundFontとMIDI fileがあれば再生できるライブラリです。
ゲームに組み込んで使う目的で開発しました。
仕組み 全て、GDScriptのみで書かれており、C++は使ってません。波形の合成はしていません。 MIDIのシーケンスデータを解釈しながらAudioStreamPlayerで再生します。
AudioStreamPlayerにはmix_rateというのがあり、元のmix_rateから変更すると音階(再生速度)が変わるので、それを利用しています。
再生可能ファイルStandard MIDI File(*.mid)format 0format 1 format 2には対応していません。2019-02-10追記、format 1と同じようなように読めるので一応対応という扱いにしておきました。保証はしません。
再生可能ファイル(予定)MOD (*.mod)perserは既に書いています。MOD.gdMIDIのシーケンスデータに変換 + 波形データをMIDIで使えるようにしてこのプレイヤーで再生できるようにしますIT (*.it)仕様は知らないのでこれから調べます ほかにシーケンスデータがあったら対応します。 副産物 SMF.gdというStandard MIDI Fileを読み込むプログラム、SoundFont.gdというSoundFontを読み込むプログラムががついてますので、それだけ切り出してなにかに利用することができます。 ライセンス MITライセンスです。

AnimationTreePlayerのメモ

最近Godot EngineでTPSを作っています。先日の八耐もコレを作っていました。
AnimationTreePlayerを使って、3Dモデルのアニメーション制御をしたのでそのメモ。

Rigidbodyのメモ

先月からGodot Engineを初めました。
練習がてらに3Dの戦車ゲームを作っていますが、サクっと作れてなかなか楽しいです。

戦車本体をRigidbodyで作っていたのですが、いろいろ躓いたのでメモ。
物理エンジンの更新間隔での処理は_physics_processに書く 1フレーム単位は_processに書きます。 そして、この中でapply_impulseを用いて制御します。 linear_velocityやangular_velocityをいじる場合は_integrate_forcesに書く _physics_process中に書くと、重力回転その他が処理されなくなります。

_integrate_forcesを使うには
self.custom_integrator = true; を_readyに書くと、_integrate_forcesが呼ばれるようになります。


Godot Engine、エディタ内でヘルプが参照できるのでこれのメソッドなにがあったっけ、というときもエディタ上だけで調べられるようになっているのは便利だと思いました。
今度の八耐にこのゲームを持っていきます。

FlxNestedSpriteでズレる問題を解決する

FlxNestedSpriteは入れ子になったスプライトを扱うものなのですが、
accelerationやvelocityに入れた値やFlxG.collideを用いた当たり判定の移動で、子供の位置が1フレーム分遅れてしまいます。
移動処理後に、以下のようにすると解決しました。

this.postUpdate( 0 );// 子供の更新for ( t in this.children ) { t.postUpdate( 0 ); }
postUpdate内部では子供の更新はしているようですが、子供の子供は更新していないのでズレてしまった原因になっているようです。