調整と設定-ランタイム変数の変更と永続化


19

ほとんどの企業には、ゲーム内の要素を微調整するためのエディターまたは可変制御システムがありますが、この問題に対するミドルウェアソリューションはありますか?私は過去にこのようなシステムを2つ作成し、5つ、場合によっては6つの異なるシステムで作業しましたが、いずれも市販されていませんでした。

これらの自家製のソリューションにはそれぞれ、値を検索し続けることから、変数の現在の状態を保存できないことまで、さまざまな問題がありました。

成熟した構成/実行時変数制御ライブラリ/アプリはありますか?

私は通常C ++でコーディングしますが、任天堂のもの以外の現在の開発ハードウェアはすべてサーバーと通信するメカニズムを提供するため、成熟した設定/変数エディターはおそらくソケットベースです(したがって、ある程度言語に依存しません)。コードの実装も非常にシンプルである必要があります(Oskarが共有しているhot_var / TweakableConstantsの記事が好きですが、パッケージではありません)

回答:


8

ノエルが彼のブログで提案したものが好きです。telnetのベース変数のTweaker。telnetを使用することにより、彼は任意のtelnetクライアントを使用して変数を編集できました。その後、彼らはプロトコルの周りにGUIを構築しました。ミドルウェアライブラリの価値はないかもしれませんが、彼のコードを見ることは役に立つかもしれません。

しかし、彼の反ルア感情には同意しません。リモートのLuaコンソールは素晴らしいようです。


彼らはあまりにもMotoGPクラス上の微調整変数のTelnetを使用:blogs.msdn.com/b/shawnhar/archive/2009/05/01/...
Kylotan

3
Telnetを使用する理由 HTTP / HTML、おい!HTTPは非常にシンプルなプロトコルであり、ゲームに簡単に埋め込むことができます-私は以前にそれをやったことがあります。
ZorbaTHut

3
私は、Telnetが非常にうまく機能し、はるかに複雑ではないと言うでしょう。1000行ではなく100行のコードで実行できます。また、更新をポーリングしてプルするのではなく、更新をプッシュすることもできます。しかし、ゲームで他の目的でHTTPが必要な場合は、ここでもHTTPを使用する価値があることに同意します。
キロタン

5

調整可能な定数のアイデアがあなたのニーズに合っているかもしれません。実際、非常に使いやすいので、効果的なランタイム変数を制御するには複雑なソリューションが必要だと思うかもしれませんが、実際には実装はほとんど単純すぎます。この手法の最初の議論も興味深い読み物です。

例:

glClearColor( H(1.0f), H(1.0f), H(1.0f), H(1.0f) );

Hマクロは次のように展開されますHotValue(x, __FILE__, __LINE__, __COUNTER__)。これにより、値がグローバルレジストリに登録されます。その後RefreshHotValues()、定期的に呼び出すような関数を用意します。この関数は、レジストリ内の各エントリを検索し、特定のソースファイルを解析して、ホット値をリロードします。

実際のソースコードを変更すると、そこに永続性があります。

H()すべてのフレームが評価されない場合、これは明らかに機能しませんが、ここで説明するようにこれを解決する方法があります

おそらく、このアイデアをソケットベースのソリューションに拡張できます。HotValue()すべてのフレームを呼び出すと、パフォーマンスのオーバーヘッドが大きくなる可能性がありますが、非常に簡単にマクロをコンパイルして完全に定数に置き換えることができるため、これは問題になりません。


2
@Kylotan:ポイントがありません。実行時に解析される実際のソースコードを変更しています。永続化は、変更されたソースを介して行われます。
オスカーN.

ええ、どういうわけか私は記事をざっと読んで見落としました。コメントを削除して読み直します!
キロタン

3
私は私だけかもしれませんが、このテクニックは...気分が悪いです。マジックナンバーを嫌うのに多くの時間を費やしたからだと思う。これはマジックナンバーでのみ機能する。明確な色が設定ファイルまたはスクリプトファイルの一部になることを望みます。魔法には、リソースをホットロードする機能が備わっています。
deft_code

@caspin:プレーン変数を使用することができ、代わりH(int, myvar, 5)にファイルを変更したときmyvarにメモリ内で置き換えます。mollyrocket.com/forums/viewtopic.php?p=5395#5395
Oskar Nを

1

AntTweakBarは、あなたがしたいことには本当に役立ちますが、ほとんどの場合、いくつかのマクロなどでリリース時に「コンパイル」するメソッドが必要になります。



0

設定管理は、おそらくゲームが比較的単純であり、必要な設定の種類のばらつきが大きいため、すべてのゲームでゼロからやり直されたものの1つと思われます。適切なストレージバックエンドのセットアップ(SQL /何でも)があると仮定すると、1〜2日で堅牢なソリューションを設定管理にコーディングできるので、ミドルウェアソリューションに対する実際のビジネスニーズはあまりないようです。プレイヤー情報の保存に使用するものに加えて、それをタックすることは、ほとんどの場合に最適な方法だと思います。


1
これは設定情報ではなく、デバッグやゲームプレイのためにランタイム変数を調整することです。

デバッグやゲームプレイのための多くのタイプのランタイム変数は、ある種の永続的なバックエンドに保存するのが理にかなっています。これにより、展開時にシステム全体でそれらを変更できます。SQLはバックエンドの一例に過ぎず、ディスク上のファイルやその他の多くの方法に情報をパッチすることができます。
ベンザイグラー

1
問題は、それらをリアルタイムで変更することです。これにはおそらく、DBで何らかのトリガーを設定し、ゲームの実行中にそのトリガーを処理して値を非同期に再読み取りできるゲーム内の何かを設定する必要があります。乗り越えられないわけではありませんが、それほど単純でもありません。
キロタン

そのDBトリガーを管理するコードは、Richardが探しているコードであり、興味深い/再利用可能な部分です。定数をファイルシステムや他のツールではなくDBに移動しても、そのコードが魔法のように表示されることはなく、おそらくより複雑になります。

-1

私は実際に最近このようなことについて考えていました、そしてそれはそれが素晴らしい候補になると思います あなたが望むどんな言語の小さなライブラリと組み合わせ Androidアプリのなると思います。アプリはカスタマイズ可能なボタン、トグル、ドロップダウンなどのセット(任意のウィジェット)であり、WLAN(または複雑な場合はUSB)を介してアクションをライブラリに送信します。ライブラリは、ゲームプレイとは別のスレッドを生成し、Androidスマートフォンのどのコントロールがゲームのどの変数に対応するか(起動コードで設定する)を認識し、Androidアプリに接続します。

そして、ゲームをいじるのは、携帯電話で何かに触れるのと同じくらい簡単です。電話のテキストボックスにゲームのリアルタイム変数値を表示することも、ライブラリを転送することもできます。stdinたりstderr電話のまたはスクロールするテキストエリアに移動する。オプションは無限です!

唯一の本当の懸念はスピードです。速度と反応時間が非常に重要な場合は、USBを介して電話を接続するだけで、adb(Androidデバッガー)はUSBを介した電話の転送をサポートします。しかし、そうでなければ、WLANにはごくわずかな遅延しかなく、この目的には十分に許容できると思います。

上記のようなことは書かれていないと思いますが、書くことを強く検討しています。(私は自分のゲームをまだ十分に開発していないので、まだ必要ではありません)

もちろん、Appleユーザーの皆さんは、おそらくiDeviceで同じことを行うことができます。私は個人的にiOS開発はAndroid開発よりも桁違いに難しいと感じていますし、もちろん上記のアプリは簡単に配布できるようAndroidマーケットに簡単に公開できますが、Appleはおそらくアプリストアへの開発者ツールを許可しないでしょうから、 Androidプラットフォームがこのツールに適していると感じます。


これは、オフィス環境では便利です。...アーティストに話を歩いて、に接続し、彼はいくつかの出会いを設定しようとしている一方で、近隣デザイナーの実行中のゲームをいじる開始
ダッシュ-トム・バン

1
実際に開発を行っているコンピューターではなく、携帯電話でそれを使用することの利点がわかりません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.