私は現在ゲーム プロジェクトに参加しており、Lua をゲーム エンジンに統合して、ゲーム オブジェクトとコンポーネントのインターフェイスをスクリプト ユーザーに公開する必要があります。
C++ クラス オブジェクトを Lua にバインドする方法を調査しようとしましたが、ほとんどのドキュメントで userdata 型を使用してバインドする方法が説明されていることがわかりました。
しかし、私たちのプロジェクトは自分たちでゲーム オブジェクトを管理しています (つまり、いつゲーム オブジェクトを削除したり、作成したりするかを決定します)、Lua のガベージ コレクションを無効にできないかどうか。具体的には__gc
、メタテーブルを nil または何もしない関数に置き換えてみることはできますか?
私の代償は、ライトユーザーデータ(このポインター)と「このポインター」を取得してメンバー関数を手動で呼び出す静的関数を含むテーブルを使用することでした。ただし、プログラマーがラッパーの静的関数を手動で作成する必要があるため、すぐに汚れて管理が難しくなります。
適切な使用法や同様の問題に対する解決策に関する優れたドキュメントへのリンクを入手できますか?