「clusterイージースクリプト」0.20公開
clusterイージースクリプトは、初心者の方向けのスクリプトです。
例えばZ方向に進み続けるだけなら、この3行を書くだけでOK。
ee.main = () => {
move(0,0,1);
}
まだ仮公開ですが、カンタンにアイテムを動かす程度なら十分使えると思います。これで作ったスクリプト付きのワールドやアイテム、どんどん公開しちゃってください。
なお、Unity用です。clusterのワールドクラフトの中でスクリプト編集することは基本的にできません。
また、ここからの説明は「Unityでclusterにワールドをアップロードしたことはある」という方を対象にしています。
今後バグがあった場合修正したり、機能を増やしたりする予定です(仕様が変わる部分が出てくるかもしれませんが、古いバージョンで作ったワールドやアイテムはイージースクリプトを更新しない限りそのまま使えます)。
準備
- Unityでワールドの準備
- ツールのインストール
- イージースクリプトのインストール
- (なければ)エディタのインストール
という感じで進みます。
まず、何でもいいのでclusterのワールドをアップロードできる環境を準備しましょう。clusterのテンプレートワールドとかが無難だと思います。ダウンロードして解凍、いつものようにUnity Hubから開いてください。あとはMinimalSampleシーンを開きましょう。
どんなときも使いやすいMinimal Sample
ここまではUnityでワールドつくるなら当然ですね。
この先、基本は「ダウンロード→(解凍→)unitypackageというファイルをUnityのプロジェクト欄にドラッグアンドドロップ」を繰り返すだけです。
かおもさんのツールをインストール
https://vkao.booth.pm/items/5924956
続けて、かおもさんのCSCombinerをダウンロードします。
zipを解凍してできたunitypackageをUnityの「プロジェクト」にドラッグアンドドロップしてください。
あとは「インポート」ボタンをクリック。
https://vkao.booth.pm/items/5111235
さらにCS Emulatorもインストールしましょう。clusterにワールドをアップロードしなくてもスクリプトのテストができます。CSCombinerとインストール方法は同じです。
https://github.com/vrm-c/UniVRM/releases/tag/v0.61.1
CS Emulatorの動作には↑の「UniVRM v0.61.1」も必要です。
リンク先からUniVRM-0.61.1_7c03.unitypackageをダウンロード、解凍が必要ないことを除けばインストール方法は同じです。
ただ、UniVRMインストール時はいくつか英語のメッセージが出ると思います。以下の通り対応してください。
UniVRMインストール中にこんなメッセージが出たら「Cancel」を。2回でるかも
同じく、こんなのが出たら一番左の長いボタンをクリック
ついにイージースクリプトを入れる
https://vins-jp.sakura.ne.jp/pack/020_easyscript.unitypackage
そしてやっと、vinsの「clusterイージースクリプト」をダウンロードします。
unitypackageをまたUnityのプロジェクトの適当なとこにドラッグアンドドロップし、「インポート」してください。
スクリプトエディタの準備
スクリプトを編集するには何かのテキストエディタが必要です。持っていない方はインストールしましょう。
VS Codeが強力ですが、ちょっとハードルが高いと思う方は国産の「サクラエディタ」などでもよいと思います(Windowsの場合)。まあWindowsに最初からある「メモ帳」でもとりあえずはいいですが……
(※エディタはUnityと関係ないんで、インストールするときはUnityにドラッグアンドドロップとかしても意味がないですよ! インストーラのexeファイルを実行します)
VS Codeの場合
https://creator.cluster.mu/2023/10/06/editor_script/
こちらにテキストエディタ(VS Code)の導入方法が書いてあります。
サクラエディタの場合
https://github.com/sakura-editor/sakura/releases
↑サクラエディタの場合はこちらから。
こんな感じの名前の一番上にあるファイルをダウンロード、解凍してインストーラのexeファイルを実行しましょう。
いずれにしても
これで準備は終わりです! お疲れ様でした。
スクリプトアイテムを配置してみる
「イージースクリプト」フォルダの中にある「ハコサンプル」をシーンにドラッグアンドドロップして配置してください。
Unityで再生ボタンを押すと、CS Emulatorのおかげでアップロードしなくてもスクリプトが動きます。ハコが前に動いていますね。
では再生を止めて、「イージースクリプト」フォルダの中にある「移動スクリプト」を開いてみてください。エディタがちゃんとインストールされ、jsファイルの関連付けもできていれば、VS Codeやサクラエディタなどが開くはずです。
ee.main = () => {
move(0,0,1);
}
書いてあるのは最初に見せた3行ですね。
これだけでハコが動くわけです。コレの改変なら、できると思いませんか?
では、この「移動スクリプト」のファイルはエディタから閉じてしまいましょう。
スクリプトを改変
まず、いちおう再生を止めたことを再確認してみてください。
(ワールドをいじるとき再生を止めるのは、Unityの基本ですね!)
ヒエラルキーから「ハコサンプル」を右クリックし、「プレハブ」ー「展開」をクリックします。
ではスクリプトを改変しましょう。
「移動スクリプト」をクリック、[Ctrl]+[D]で複製します。そして[F2]キーを押し、「Y移動スクリプト」などの名前に変更してください。
そして「Y移動スクリプト」をダブルクリックするなどしてエディタで開きます。
ee.main = () => {
move(0,1,0);
}
そして上のように書き換えてください。1の場所が変わりましたね。
書き換えたら、上書き保存([Ctrl]+[S])を忘れずに。
まず「ヒエラルキー」のハコサンプルをクリックします。
そして「Y移動スクリプト」を「インスペクター」の「CS Combiner」にある「移動スクリプト」のところにドラッグアンドドロップです。
なお、間違って「_移動イージー」のほうを変えないようにしてくださいね。
そっちは「イージースクリプト」の本体が入っています。ややこしい部分はvinsが別のファイルに事前に書いているから、ユーザーは自分の動かしたいとこだけに集中できるのが「イージースクリプト」のポイントです。
ここで [Ctrl]+[R]を押します。 さっき保存したスクリプトが最新の状態でUnityに読み込まれます。
では再生ボタンをクリックしてください。
今度は前ではなく上に動くようになりましたね。
基本的な動きのスクリプトを試す
ee.main = () => {
rotate(0,30,0);
}
次はこうです。moveがrotateに変わり、数値も変化しましたね。
なお、いちいち打ち込まなくてもコピペで全くかまいません。 上のスクリプトが書いてある欄の右上あたりにマウスカーソルを持っていくとコピーボタンが出てきます。
[Ctrl]+[R]を押してから再生すると、ハコが回転するようになりました。
ちなみに「30」というのは、「1秒で30度回転しろ」という意味です。
ee.main = () => {
rotate(0,30,0);
moveForward(2);
}
さらにこうしてみましょう。
[Ctrl]+[R]を押してから再生すると、回りながら前に進むようになりました。
単純に動くだけのアイテムなら、move、rotate、moveForwardだけでもそんなに問題ないはずです。
少し発展的なスクリプト
ではもう少し高度なのをやってみましょう。
再生前の [Ctrl]+[R]を忘れずに!
ee.main = () => {
sinMoveX(1, 1);
moveForward(2);
}
これはヘビのように蛇行しながら前に進みます。
ee.main = () => {
findPlayer(3,0.2);
aimForwardPlayer(2,1);
}
これは近くにいるプレイヤーを2のスピードで追いかけてきます。距離が3を超えるか、逆に1より小さくなるとストップします。
なお、findPlayerは少し重い処理なので0.2秒に1回だけ探すようにしています。それでも十分でしょう。
ee.main = () => {
findPlayer(3,0.2);
aimForwardPlayer(2,1,2);
}
ほぼ同じですが、aimForwardPlayerの最後に「2」を追加すると三次元で追いかけてくるようになります。上下移動もしてくるわけです。ジャンプするとわかると思います。
ではもう少し長い奴を。
ee.start = () => {
setStep([2,1,0.5]);
}
ee.main = () => {
switch(step) {
case 0:
moveForward(2);
break;
case 1:
rotate(0,90,0);
break;
case 2:
break;
}
}
今度はスタート時に処理を加えています。
「2秒経過、1秒経過、0.5秒経過」でstepという変数を0→1→2と変えるものです。
普通のカッコの中にさらに [ ] のカッコがあるのをお忘れなく。
mainのほうは少し難しいですね。switch文というもので、stepの数値に応じて処理を変えることができます。また、各処理が終わる時「break;」というものを入れないといけないのを忘れないでください。
実行すると、進んで→90度回転し→待機し→また進む、となっています。
状況に応じて処理を変えたいときは、このsetStepとswitchをうまく使いこなしましょう!
さらなるサンプル解説
「イージースクリプト」サンプルに入っている例を解説している記事をいくつか書きました。
これを読みながら、改変などしていってください。
01 ボタンと音
02 持ち物
03 乗り物
04 銃と的
05 NPC
関数(と一部の変数)一覧
clusterイージースクリプト 関数一覧
こちらからイージースクリプトにある関数の一覧を見られます。
注意点
ワールドやクラフトアイテムをアップロードするときには、再生ボタンを一度押してからにするか、あるいはCS Combinerにある「全更新」ボタンを押してからアップロードしましょう。
入っているスクリプトや素材は自由に使うことができます。
https://creator.cluster.mu/2024/07/08/playerscript-2/
ただし、「cluster由来」フォルダには↑のclusterベータ用のアイテムサンプルに含まれていたモーションが含まれています。https://creativecommons.org/licenses/by/4.0/に基づいて再配布しております。
「cluster由来」フォルダに入っているモーションを活用したい場合は、アイテムサンプルのほうからダウンロードし直すことをおすすめします。
欠点は?
エラー・バグが出たとき、「○○行目でエラーが出たよ」と出ても、それが実際にはどの行なのかわかりづらくなりがち です。
あなたの書いた独自のスクリプトの前に、「イージースクリプト」の中身が長く入るからですね。例えば「320行目」と言われても、その前に300行の「イージースクリプト」本体が入っていたら実際は20行目を見ないといけないわけです。
「tick」や「player」などよく使われそうな名前をグローバル空間で宣言しているので、命名がぶつかると面倒なことになる可能性もあります。
イージースクリプトは、そのアイテムには不要かもしれない処理が書いてあります。例えば前に進むだけのアイテムなら回転処理は本当は不要なのですが、イージースクリプトにはそれが書いてあるわけです。
とはいえ最近のスマホやPCは速いですから、よっぽどそのアイテムを大量に配置したりしなければ大きな問題にはならないはずです。ワールドクラフトで100個とか置くアイテムの場合は、1から普通にスクリプトを書いた方が無難かもしれませんが……
Discussion