日向、スクリプトデビューする!
Q:『$ is not definedエラー』の解決方法は?(PlayerScriptでの)
A:いやPlayerScriptではそう書かないから。 (_を使うよ!)
このレベルからです。まるで何もわかっていません。
それでチップを一日一回制限でワールド間キャリーオーバーしようとかずばりアホだろ?
ハッハッハ、ばれちゃあ仕方ねえ。
アホがすぎるとな……いったいなにが無茶かがそもそもわかんねえのだよ (ドドン)!
そういうわけで、さっぱりわからないなりに、換骨奪胎用モデルの当たりをつけていきました。
(すばらしい例をお示しくださった先達の皆様、ありがとうございます!!)
一日一回、来たのかぞえるよってのは……
『PlayerStorageを使ってワールドのプレイ数をカウントしてみよう』
https://creator.cluster.mu/2025/05/19/playerstorage/
でやってます。
クラスタースクリプトでもって、客人さんにプレイヤースクリプトくっつけーの、くっついたプレイヤースクリプトで、ご利用日付比較とかカウントとか記録とか表示とかやりーの、という流れです。
これを、基本に据えましょう。
ただこれは、ワールドに『きた』時点でもうクラスタースクリプトが動き出してしまうものなので、そこは変えなきゃです。
日向がもとめているのは、『キャリーオーバー受付所にきたら』つまりキャリーオーバー受付ルームの空間に『触れたら』処理開始する……ってなかんじなのです。
そこで、……
『はじめてのベータ機能|ジャンプ台をつくる!』
https://note.com/inabanousagi/n/nea1a7565d85c
こちらには、設定したコライダーエリアにかさなってる人をかぞえる、ってとこがあります。
クラスタースクリプトの内容を、こっちにさしかえ。
関連するゲームオブジェクトも、記事に従いセッティングします。
ルームの空間を満たすようにキューブを作り、『BoxCollider』をアタッチ。設定は『トリガーにする』に。
つづいて『Overlap Detector Shape』『Scriptable Item』『Player Script』をつけ……
『Scriptable Item』に、↑の内容をコピペった『Counter.js』をつけ……
(〇〇.jsこと、Jason Fileは、テキストファイルをつくって拡張子を.jsにすればできます。
行数を表示できるタイプのテキストエディタで開けるよう設定すると編集サクサクです)
これの、『プレイヤーをドーンうちあげる』とこを、『プレイヤーはんにプレイヤースクリプトくっつけてーな』というのにかえます。
つぎに、『Player Script』んとこに『Player.js』をつけます。
『Player.js』の内容は、『PlayerStorageを使ってワールドのプレイ数をカウントしてみよう』とほぼほぼ同じ。
『今日の日』と『まえにこのエリア来た日』を比較して……
違うなら、5000コイン加算あーんど『キャリーオーバーしたよー』メセを表示。
同じなら、『日付が変わってからもう一度お願いします』といっておしまいす。
と、おもったらどっこいしょ。
どーにもうまく『Player Script』がつけらんねえ……
ログ表示したらエラーの赤文字がブワー出る。ほっとくと無限に出る。どないせえっちゅうねん。
ウチューネコ顔で対処法を検索しまくり (勝手に我が心の師と仰ぐ)vinsさんの記事に救われました。
イス座ったりアイテムもったりんときをタイミングにすると、ズバッと一発じゃと!
そ れ だ !
というわけで、手続き対象判定を行うオブジェクトを、部屋の空間から、ひとりようソファーにチェンジします。
Ridable Itemとくみあわせ、『このソファすわったらその人に『Player Script』がくっつけられるよ~』というように変えます。
これはうまくいきました。赤文字ブワーがなくなりました。やった!
しかしエラーはまだ残ってる。なんと、5000コインの加算ができぬ!!!
構文はコピペしてきているはずなのに、シンタックスエラー――『$ is not definedエラー』がでてしまいます。
ここで、そもそも基本をちゃんとやってないことがボディブローのようにきいてきました。
アホなもんで、冒頭のこたえにたどり着くまで、実に半日かかりました。
悩みまくって風呂キャンまでして、家人には『そもそもがなんかちがうんじゃね?』とのお言葉をいただき、うーんうーんうなりつつ寝床に入ったとたん、ひらめいたのです。
『そもそも、PlayerScriptって記法が違うってなんかどっかのサイト様にかいてあったから……PlayerScript追加の記事をまずあたるべきじゃね?』
はい、これでようやくわかったのです。いやPlayerScriptではそう書かないから。_を使うのだよ、と。
けれどすぐ、また壁にぶち当たりました。
『_で指示はじめてるのに5000コインプラスできねーじゃん! なんで?』
このこたえは『プレイヤースクリプトはそれ担当じゃないんで。クラスタースクリプトにオネガイ投げてんか~』『んで、クラスタースクリプトのほうでオネガイうけて、作業するようにしといてな~』でした。
けれど今度、ただしい書き方がわかりません。
オネガイ発信受信、noteの記事の例文をそのままコピペるとエラー出るのです。
そこで、ほかの記事の例を徹底的に洗い、変数を使ったりして、記述を変えるべきところと、なんも考えんとそのままの記述でいいところを割り出しました。
ここまでできたら、さすがにもうひっかかりませんでした。
必要な変数を最初にちゃんと宣言して、できあがり!
そう、クラスタースクリプトと、プレイヤースクリプトは、処理を行う領域が違い……
指示の書き方も、できることもちがうのです。
プレイヤースクリプトでは、プレイヤーのいろいろにかかわる処理のみできます。
いやプレイヤーの所持金変えるって、プレイヤーにかかわる処理じゃないん……?
まあそこは、取り決めなので仕方ありませんね。ともかくそういう線引きなら、そう使うまで。これでミッション・コンプリートです!
……とか思っていたら最後に処理の順番間違ってコピペて、結果がどーでも『同じ日付だよまた来てんか』のメッセしか出んようにしてしまってた(日付比較して『違う』場合の処理で、最終日付更新してるのに、そのあとに『同じ』場合の処理置いてた。そら全部『同じ』場合のメセでるわなそれは。コインの処理はできてました^^)。
やばい、基本的に論理思考に難があるのがバレバレです。
さらには、『手続き完結してないで落ちると、部屋に戻してもらえて続きからやれる』セッティングにしたのに、なぜかスポーンポイントの設定が外れてて、リリース直後に公開停止し、アップロードやりなおすはめになりました。
まだどなたもいらしていなかったのが、不幸ちゅうの幸いでした。
いやはや、公開の瞬間お客様が押し寄せる人気ワールドじゃなくてマジよかった……試験実装って予防線張っといてマジマジよかった……とこの時ばかりは本気で思いました。
しかしこればかりは悔しいですね。直前にチェックしたときは大丈夫だったのに。
いや、そもそも通常の進行だと、こちらの記事作成に際して写真をとり、記述をつけるので、それがチェックになって、ワールドアップデート本番まえに直せていたのです。
何が原因かはわかりませんが、とにもかくにもミスがあったことは事実。
その根本原因が、能力不足による日程不足というのも。
万全を期すなら『チビ猫、コイン引継ぎをつくりあげる』の部分は行わず、完全に『試験実装』にとどめて今回のリリースを行うべきでした。
しかし、今回強行軍を行わねばならなかった理由も、それなりにはあります。
カジノコフレリリース7/13より、一か月近く『キャリーオーバー実装近日!』と言い続けているのです。
それなりのものをいい加減出せなければ、そしてそれはこのタイミングしかない、という危機感が強くありました。
(ショップエリアや花火シミュレーターもブッチしてますしね……orz)
お盆の精霊牛馬にははたして乗れるでしょうか。
技術的には可能そうではありますが……よく考えたらそれに乗るのってわしらじゃなくて、ご先祖だよね?
うん、やめるべきでしょう。つかそもそも、上空から今のカジノ見られたらいろいろやばい (おい)。
まずはこのラッシュを乗り切ること。粛々とすすめていくことにします。
次回は『チビ猫、カジノでお盆を祝う』8/15投稿予定です!
同日ワールドアプデ予定です!
どうぞ、お楽しみに!