日向、『CCK 特定のプレイヤー ボタン ロック解除』ができるようになる
2025.01.29
↓の文章を削除しました。
『このへんです。
かくれてるとこに「このオブジェクトオンオフするよ」のコンポーネントがございます。』
写真撮りなおしたからもうこのくだり、いらなかったのに消し忘れておりました。
混乱なさってしまわれた方、大変申し訳ありませんでした!!
過去の自分へ:タイマーを使え。
『Item Logic』で、プレイヤーのパラメータを判定し、アイテムシグナル発火
↓
シグナルをうけて『Grobal Timer』発動、グローバルのパラメータを操作。
待ち時間は0.01秒(最低)でOK。
はい、今回は、クラスタークリエイターズキット(略してCCK)のおはなしです!
CCKはクラスターのワールドをつくるのに使う、べんり機能のつまった作成環境です。
これのおかげで『ワールドの入口はここにしまーす!』とか、『いすに座るぜ!』とか『ドアを開けるよ!』とか、『このワールドではジャンプ力6ばーい!』なんてことが、かんたんにできちゃうのです。
しかし、ときに意外なワナにはまることもあったりします。
そのひとつをなんとか脱出したときのことを、これからお話いたそうと思います。
あれは、ざっと一週間くらい前のことでした。
タイトルのワードでですね、検索したんですけれど……
ダメでした。解決法、見つけられませんでした。
『何がしたくて、できなかったか』といいますと。
『ルームマスター権限を持った(=そのPlayerの権限が1の)プレイヤーが入り口わきのボタンを押すと、入り口のロックが解除される。
このとき入り口の色が変わって、あたり判定もなくなるようにする。
※ボタンとあたり判定がダブるのをさけるため、入り口オブジェクトはボタンとは別の、親子関係もない、オブジェクトにしなければならない』
っというのが、できなかったのです。
なぜか。
ここに注目です。
『※ボタンとあたり判定がダブるのをさけるため、入り口オブジェクトはボタンとは別の、親子関係もない、オブジェクトにしなければならない』
『ボタンとは別の、親子関係もない、オブジェクト』である、入り口オブジェクトに……
ボタンからの影響を与えるのであれば……
ワールド全体、どこにでも影響を及ぼせる、属性Globalの合図を出さねばなりません。
プレイヤーがボタンを押すと、そのプレイヤーのパラメーターを見て、ボタン(もしくはその代理)が、判定を下し、合図を出します。
けれど、ボタン(もしくはその代理)が判定を下しても、属性Globalの合図を出すことは、そもそもできない作りになっていたのです。
パラメーターをみて判定して、その結果で合図をだす。
計算して、こたえをだす。
こういったことをやってくれるコンポーネントを『ロジック』とよびます。
この『ロジック』、三種類ありまして、それぞれ担当範囲がちがうのです。
プレイヤーのパラメーターだけをあつかう『Player Logic』。
ワールドにおいてあるアイテムのパラメーターと、プレイヤーのパラメータをあつかうことができる『Item Logic』。
ワールドのすべてに影響を及ぼせるパラメーターだけをあつかう『Global Logic』。
まあだいたい読んで字のごとく、なのですが……
これで計算をした結果を、どこに通知できるか。これがポイントです。
『Player Logic』は、Player(対象のプレイヤー個人)に。
『Item Logic』は、This(そのアイテム自身)かOwner(そのアイテムをさわったりしたPlayer個人)に。
『Global Logic』は、Global(ワールド全体)に。
おわかりいただけただろうか……
そう、GlobalにPlayerやItemから、影響を及ぼすすべがないのである。
『ドアと、それにかかわるコライダーをわけとくと、いろいろべんり、というかそれができないとこまるケースもある』ということは、『といれっ島』のドアをつくったとき(=『チビ猫、れすとるーむをこんがりベイクする』)にとりあげたのですが……
ここにPlayerにまつわるあれこれをくわえようとすると、むりげー可してしまう、という事態に見舞われるわけなのです。
いやいやいっくらなんだってそいつぁねーだろ。
というわけでいろいろ試してみたところ、コンポーネント『Global Timer』がItemからのシグナルを受信し、Globalのパラメータをいじれることを発見したのです。
こちらもうちょっと解像度を上げますと……
『Item Logic』は、Playerのもってるパラメーターを (も)読んで、判定や計算ができます。
そしてその結果にもとづいて、This(そのアイテム自身)にたいして合図 (シグナル)を発することができます。
ItemからItemへのシグナルなんで、これはとうぜん属性Itemのシグナルです。
属性Itemのシグナルということは、『Global Timer』を始動できます。
そうしたら『Global Timer』で、Globalのパラメーターを変えることができまるのです!
まさかの『Global Timer』を使うことで、Logicだけではできなかった『GlobalにItemやPlayerから影響を及ぼす』ことが可能になるのです。
つまり、Playerのパラメーターで、ワールドを動かすことが、できちゃうのです。
もちろんこうなっているのには、理由あってのことと思います。
日向レベルではまだはっきりしたことは言えないのですが、ワールド内の混乱を避けるためかと思われます。
たとえば100人のプレイヤーがごちゃバトルするフィールドで、だれかのHPが1とか変わるたびステージギミックがぱぱっと変わるようにしちゃったら、カオス不可避です。
すくなくともそこは一回タイマーをかませて、タイミングの交通整理をすることが必要……ということなのかもです。
(といれっ島のワープギミック、うまくいかなくてあきらめたやつも、もしかしたらこれで安定したのかもしれません……)
今回はちょっと解説動画ふうに、つか脳内で無駄にHIKAKINさんボイスで再生しつつ、説明をがんばってみました!
せっかくなので最後はHIKAKINTVふうに締めてみたいと思います!
この話がよかったなーと思っていただけましたら『いいね』ボタン、評価、ブックマーク登録など、ぜひぜひよろしくお願いします!
ぐっぶぁ~い(※リアルで出せない渋い声)
参考
Cluster Creator Kit ドキュメント
https://docs.cluster.mu/creatorkit/
クリエイターズガイドさん CCKコンポーネント早見表
https://creator.cluster.mu/2022/04/28/cck-quick-list/#Global_Logic
↑ こちらの記事は、日向がひそかに (勝手に)師と仰ぐvinsさんによるわかりやすい説明と、Cluster Creator Kit ドキュメントの当該ページへのリンクがまとまってます。
今回を書くときめちゃくちゃお世話になりました。要ブクマです!!
次回は『チビ猫、ふたたびの島をつゆぞらに浮かべる』1/27投稿予定です!
同日ワールドアップデート予定です。
どうぞ、お楽しみに!