tanaka's Programming Memo

プログラミングについてのメモ。

【Godot】読み出し専用プロパティは作れないっぽい

Unityではgetterのみを用意することで読み出し専用のプロパティを作ることができました。Godotでも同様のことができると思っていて次のようなコードを作成していました。

@export var _data := 0
var data: int:
    get:
        return _data

意図としては、_dataをインスペクターに表示して設定できるようにしつつ、アクセス先はgetterを定義したdataにして、コードからの書き換えはできないようにするというものです。

ところがこれを実行すると、インスペクターにData欄が2つ表示されてしまいました。また、setterを定義していないはずのdataに値を代入してもエラーになりません。

Godotのドキュメントでプロパティのところを読んでも、getterのみの例がなく、そのような記載例もありません。どうもsetterを無効にすることができないようです。配列の数を確認するsize()などのプロパティでよさそうなものがメソッドだったのはそういう理由だったと腑に落ちました。

ということでまあまあ作っていた読み出し専用のつもりのプロパティをすべてメソッドに置き換えたのでした。なお、C#のように参照を全て検索、とか、名前を一括変換、とかができないので、全部手作業・・・。

おまけ

本格的に開発するにはGDExtensionとかで基礎を作った方がよいだろうかとも考えたのですが、こちら→こわくない!! たのしい!! GDExtension - Speaker Deckのスライドを拝見すると、プラットフォームごとにビルドが必要とか面倒そうなことが書いてありました。

なかなかベストな使い方が見つからないです。