パスワードを忘れた? アカウント作成
15252648 journal
日記

yumeの日記: メデューサ・ゲーム改・5 1

日記 by yume

前回の続き。

◉レバー
んで、次はレバーを作る。
レバーの前に、まず抽象的概念の「Touchable」を作る。
Touchableは、Playerとの接触を検知し、接触状態ならTouchイベントを発行する。
また、Touchイベント中にインタラクトすると、Interactイベントを発行する。

LeverSwitch : SwitchBaseは:
1. Touchableを参照し、
2. Touchイベントを購読し、Touch状態に合わせてレバーの表示を変える(枠線をつけるとか)。
3. Interactイベントを購読し、インタラクトされた時にスイッチイベントを発行する。
よさそうだ。やっていこう。

まずTouchable
・タッチの確認 isTouch はUniRxのBoolReactivePropertyで実装。
BoolReactivePropertyはBoolのようなものだが、値が変わったときイベントを発行する。
・インタラクトの確認 interactEvent は値無しのUniRx.Subjectで。ここもBoolReactivePropertyで実装できるかもしれないけど、インタラクト自体に2値が不要な場合や、あるいは複数回のインタラクトが必要なものがこの先できないとも限らないので、ここでは値をもたずに、これを参照する個々のSwitchなりが制御するとしよう。

Touchableはコライダーの状態を確認して、触れた場合は触れた対象のInteractに自身をターゲットとして登録する。前回のように一度に二つ以上のインタラクト対象に触れるということはない(だろう)から、リストにする必要はなく、ターゲットは常に単一としておこう。
このInteractを実際に行うActor側のクラスを、そのまんまInteractorとする。
InteractorはActor(Interactができるプレイヤーやその他のキャラ)にくっつけて使う。
実装はこんな感じ。大したことはしないけどクラスはわけておこう。

ふと思ったが、ここでいうtarget変数のようなものは、それをSetするメソッドがあるなら、事実上Public変数じゃないんだろうか。
なんとなくPublic変数を避けるようにしてるけど、ここまで自由の利くメソッドにしちゃうと実質Public変数みたいなもんだよなぁ。関数の名前から何をさせたい変数なのかはわかる、というのはあるか?
なんだか、極端な話、このクラス何もしてないとも捉えられるぞ。単にTouchable変数を持っているだけでも成立するんじゃ……。

うーん……。まぁいいか。

で、LeverSwitch。これは簡単。
AnimatorはSpineで作ったスケルタルアニメーションを制御していて、それに対して命令を飛ばすだけで表現はOK。
そんでSwitchBaseから継承したSwitchイベントを発行する。

--

あとプレイヤーのアニメーションも仮で作っておこう。今回は歩くというよりタイル間をステップするようなアニメーションにしておきたいので、簡単にそんな感じのやつにしておく。
そうすると、ActorのAnimationをまとめて管理しておくクラスが必要になりそうなので、ActorAnimeControllerクラスを作っておく。このクラスはスケルトンの向きとアニメーションの呼び出しを行う。

動作確認。

  • by Anonymous Coward on 2021年04月08日 9時43分 (#4008887)

    値を設定したときに他の処理を追加したい場合に困るので、Public変数とSetメソッドには大きな違いがあるのです。
    一方でpublicからprivateに変更するだけで変数のアクセスをgetter/setterに変えるのも大変なので、C#や他の言語にはプロパティという仕組みが用意されています。

    ここに返信
typodupeerror

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

読み込み中...