📝

cluster新機能、スクリプトで何ができるようになったのか?

2022/10/24に公開約5,300字

ついにclusterに「スクリプト」機能が実装されました!
 画期的なことなのですが、

  • 結局なにができるの?
  • 前できなかったこと、何ができるようになった?
  • むずかしそう
  • どうすれば作れるのかわからない

という人も多いでしょう。

 筆者もまだ完全に理解できているわけではないですが、とりあえず「スクリプト」で何ができるようになったのかをザッと説明していこうと思います!

(※ここで説明しているものはどれもワールドクラフトで使えます! ただ「配列」などはアイテム生成と組み合わせないとメリットが小さいので、アイテム生成できない今のワールドクラフトでは微妙かもしれません…… →10/25追記、今のスクリプトだと配列は継続したデータの保存が難しいようなので活用がそもそも難しいようでした……)

とりあえずサンプル的な動画を

https://twitter.com/vins_cluster/status/1583334238425710592

https://twitter.com/vins_cluster/status/1583680441772826625
※最後のは同期の問題があるので、「みんなで同じ演出を見たい」とかの場合はタイムラインのほうがいいかもしれない……

位置・回転操作のパワーアップ

これまで、CCKでモノの動きを操作するには Add Instant Force Gimmickなどを使って「特定の方向に加速(直進か、ある方向に曲がり続ける)」か、Animatorで決まった動きをさせるくらいしかできませんでした。

スクリプトではもっと自由な動きができます!


ランダムに荒ぶる動き

8の字の動き。ちなみに三角関数を使います。意外とカンタン!

さらに、アイテムの子を動かすのもカンタンに。

アイテムの子を自由に動かしたり回転したりできる。細かいパーツを動かしてロボットの動作を表現したり、エフェクトをコントロールしたり、他にも色々使い道がありそうだ

フクザツな計算や条件チェックが書きやすい

これまでもclusterにはロジック機能があり、数値を計算したり、数字によって(お金が100以上とか、HPが0以下とか)処理を変えたりすることができました。
ただこのロジック、少しフクザツな計算や条件チェックをやらせようとするとトンでもなく長くなります。


スクリプトでは、かなりこれが見やすくなります!
例えば、「押した人が100ゴールド持っていたら、カギをゲットして入手音。持っていないなら失敗音を鳴らす」というのを考えてみましょう。


ロジックで書くとこれくらいの処理が……


スクリプトではこんなに短くなります!

スクリプトでメジャーな機能も盛りだくさん!

さらに「くり返し処理がカンタンにでき、回数もコントロールしやすいfor文」や「数字によって処理をカンタンに分岐させられるswitch文」などスクリプトを元々書いていた人に嬉しい機能もたくさん!

プログラムっぽいのキライ! という人も……

もちろんプログラムっぽいものを見た瞬間「うっ」となってしまう方、「元のロジックのほうがマシだ」という人もいらっしゃるでしょう。

でも、慣れればロジックよりスクリプトのほうがスムーズに理解できるようになります! しかもjavaScriptという超メジャーなスクリプトなので、ここで覚えておけば他の場面でもプログラムっぽいことができるようになりますよ!

そしてよく出てくるパターンは割と決まっているので、それを覚えて改変していくだけでもかなりのスクリプトは作れます。
次回書く記事では、そういうスクリプトのパターンも紹介したいと思います。

「ランダムな値」が使いやすい!

上のほうのサンプル動画でもランダムな値で動きを荒ぶらせるのをやりました。
元々CCKにはLotteryというクジ引きとかに使える機能がありましたし、時刻を使ったウラ技的な方法でランダムっぽい値を得る方法もありました。しかしスクリプトを使うと、はるかにカンタンにランダムな値を使うことができます!

これによってクジ引きやガチャやRPGのダメージ計算などが書きやすくなりました。

「配列」で、カードゲームやシミュレーションゲームっぽいものが!

10月25日追記、今の時点ではclusterスクリプトで「配列」はどうも素直に使いづらいようです。。。ただ「文字列」を使った力業により、下の動画のようなことくらいはなんとか。
https://twitter.com/vins_cluster/status/1584782783955619840
さらに「配列」という機能を使うことで、カードゲームやシミュレーションゲームっぽいものも作りやすくなっています!

配列とは数字のリストみたいなものです。例えば52個入る配列を作れば、トランプのカード(ジョーカー以外)を全部記録することができます。
配列が優秀なのは、その中に入れたデータを見たり変えたりしやすいことです!


「配列に入れた数字を、最初から最後まで全部+10する」だとか、「配列に入れた数字からランダムで1つ取り出す」だとか。これは従来のCCKではできませんでした! この配列を上手く使うと、
・トランプなどのカードゲーム
・マス目を使ったシミュレーションゲーム
・RPGのアイテムやスキル管理
こういうことがどんどんできます!
→10/25追記、今のスクリプトだと配列は継続したデータの保存が難しいようなので活用がそもそも難しいようでした……

ログ機能で、スクリプトのどこがおかしいのか調べやすくなった!

これまでのCCKの大きな弱点の1つが「ログ機能」でした。
ワールドの動作がおかしいとき、「ここまでは動いているのかな? それとも、もっと前で止まっているのかな? ここに来たとき、ゴールドはちゃんと増えているのかな?」などを調べるのは大事なことです。従来のCCKだと、音を鳴らすなどしてムリヤリこれをチェックしていました。

スクリプトにはログ機能があり、スクリプトの好きなところで「コンソール」にメッセージを出すことができます!


右上の「コンソール」に出ている数字はトランプの通し番号のログ。0番から51番までで52枚のカードを表現している

しかも「そのときのゴールドの数字」や「そのときの弾の位置」などの情報を出すこともできるので、フクザツなワールドをグッと作りやすくなります。

不安定なタイマーに頼らず「毎フレーム」処理をさせられる!

最初の「位置や回転の操作」とも関係するのですが、スクリプトを使うと「毎フレーム」操作をさせられます!

これまでのCCKでは、細かいタイミングで何かをチェックしたいときは「0.01秒ごとにタイマーを呼び出す」などしなくてはなりませんでした。これはclusterに負荷をかけてしまう上に、回線状態が悪い人だと何かの拍子でタイマーが呼ばれなくなる、などのトラブルも起きることがありました。


スクリプトでは、「実行中常に(毎フレーム)処理させる」ことが可能です! 言ってみれば超短い間隔で、絶対に止まらないタイマーを呼べているようなものです。
これによって最初のほうで見たようにフクザツな動きを実現できますし、「○○の条件を達成したらすぐさま××を起こす!」のような処理もやりやすくなっています。

注意:スクリプトも万能ではない!

さて、今回の「スクリプト」機能発表を見て……

「これまでclusterワールド作成をぜんぜんやっていなかった人でも、プログラム経験者ならバンバンすごいワールドを作れるんだろう」

と思った方も多いでしょう。

でもそれは違います。


今回のスクリプト機能は、ひとまず「元々あったトリガー・ギミックの間をつなぐもの」「数字の計算、モノの位置や回転操作がパワーアップ」と思っておくといいです!

元々clusterにはロジック機能(オペレーション)がありました。これはまさに、トリガーとギミックの間をつないで「特定の条件のときだけギミック発動」「数字を計算したり記録したり」ができるものでした。

https://twitter.com/noir_neo/status/1288533876415950853

スクリプト機能は、このロジック機能を「短く、慣れればわかりやすく」書けると考えればよいと思います!

それプラス、位置操作や回転がやりやすい、ログが見やすい。
これが今のclusterスクリプトです!

Discussion

ログインするとコメントできます