読者です 読者をやめる 読者になる 読者になる

RE:ADV

UnityでADVを作るブログ

プログラミング生放送勉強会 第32回@GMO Yours から学んでみた

今日は、昨日行われた

を見ながらUnityの勉強をします。

赤坂玲音氏の発表から
ユニティのコーディング手法いろいろ

  • publicでフィールドを公開しない!


僕自身がプログラミング超初心者なので、そういう視点で進めていきますが(以下、間違ってる可能性があります(キリ)、

public float Value{ get { return _value; } }

↑この書き方はプロパティと呼ばれるもので、とても重要な文法のひとつです。

プライベートな

_value

というフィールドに
パブリックで公開された

Value

(↑先頭が大文字!)というプロパティをゲッターとして設定しています。

イメージとしてはブラックボックス(プライベートなフィールド)に出力用端子をつけまーす、と宣言している感じです。

出力がゲッター(get)で、入力がセッター(set)ですね。
セッターはプライベートにしてしまって自分のクラスからしかアクセスできないとかやります。
プロパティというのはフィールドに値を入れたり出したりするときに関数を実行するものらしいので、ここを工夫するといろんな仕組みが実現できる感じです。

[SerializeField]

これはアトリビュート(属性)というもので、フィールドやメソッドの前につけると機能を発揮します。
Unityの場合、シリアライズフィールド属性をつけるとエディター上のインスペクターに公開されるというわけですね。
同じ機能を持つパブリックなフィールドより良いよ、と。僕はいままで全部publicで公開してたので(安直)、これからはSerializeFieldを使いたいですね。

  • 遅延初期化する

わかんない感じの技術が出ました。

どうやら、ゲームオブジェクトをインスタンシエイトしたとき、Awake()やStart()といったユニティが用意してくれているメソッドでの初期化には問題があるので、それを避けつつ、記法としてもよいのでは(フィールドと初期化処理が一カ所にまとまるので)、ということのようです。
コードは

こう…かな。
上記のコードを用いて、Start()メソッド等でインスタンシエイトしたオブジェクトを初期化するといいよ、と。(ここら辺の細かい手順は動画で要確認です。)

  • 静的に参照する
  • 文字列定数の代わりに列挙型を使う

すごくいい感じの決まりなんで、ぜひ使っていきたいと思いました。

  • アニメーターをラップしたクラスを作る

ユニティのプレイヤーの挙動もこういうラップがしてあったと思います。それを自作して挟んでおくパターンが有効。

  • Update()の処理をコルーチン(Coroutine)化する

えっ!て思った話。でも常識みたいでした。
アップデートには何も記述しなくてもいける、その方がロジックが破綻しない!
いわゆるステートパターン(の直書き)否定なんですね。

→これを「宣言的に書く」と表現できるようです。

フラグ管理をしなくてよくなる…。素晴らしい!でもまだよく理解できない!
次に話をされたとりすーぷ氏も同じ話をされていたので、よゆーでできる技術のようなんですが。

やってみたいですね。動作(M/Model)/操作(条件づけられて変化する・C/Controller)を分けてコーディング。それらをインターフェイスで抽象化しておく!

以上の赤坂玲音(Leon Akasawa)氏のサンプルコードは

でダウンロードできます!