clusterワールド、ちょっとレベルアップ〜Unityなんもわからん人へ、ワールドの中身全部見せます〜

seironsyugi
この記事では下記の事を学べます

実際に公開しているワールドを例に、
ワールドの構成方法や、さまざまなギミックの作り方を紹介します。

・わかりやすい構成や名づけ方法など
・ON/OFFスイッチの作り方
・トグルスイッチの作り方
・選択スイッチの作り方
・スタッフコライダー、サブ音声などの設置方法
・ギミックと音を組み合わせる方法
・マジックミラーの作り方
・実際のワールド構成全て

はじめに

マイワールド(CCK・クラフト)をワールドクラフトのベースとして選択できるようになりましたね!!!!

↓公式からの案内
https://note.com/cluster_official/n/n5e749924fba5

ということで!
clusterを楽しむ方々も、Unityちょっと触ってみようかな?という方が増える時期なのではないでしょうか。

この記事を書いている私自身、UnityやCCKを専門的に勉強しているわけではありません。
正直なところ、細かい仕組みや設定については、今でもよく分からないままワールドを作っています。

この記事では、そんな「Unityなんもわからん人」が、実際の一つのワールドを例に、制作でやっていることを紹介します。

「CCKでワールドをアップロードできたけど、その先どうすればいいの?」

という方の、次の一歩になれば幸いです。

CHiHAYA
CHiHAYA

正解とは限りません。でも、まぁ動きます!!

「この設定にしたら、やりたいことができた」
くらいの感覚で、半分くらいは雰囲気で作っています。

ワールド制作・三種の神器

次に、cluster公式から公開されている、三種の神器について説明したいと思います。
これらのリンクは、お気に入りに入れておくことをオススメします!

1.Cluster Creators Guide

https://creator.cluster.mu/

私の知識もここから!
はじめてのワールド制作に必要な知識がたくさん!
というか、最初はこちら無しでワールドは作れませんでした
この記事でも、ここからいくつか引用させて頂いています。

2.Cluster Creator Kit ドキュメント

https://docs.cluster.mu/creatorkit

Cluster Creator Kitの基本的な使い方や、各種コンポーネントの仕様を確認できる公式リファレンスです。
全部を理解していなくてもワールド制作はできますが、「この機能ってどういう仕様なんだろう?」と疑問に思ったときに調べるための資料として使います。

3.Cluster Creator Kit スクリプトリファレンス

https://docs.cluster.mu/script

clusterの『スクリプト』について、使える機能や仕様がまとめられた公式リファレンスです。
「もっと複雑なことをしたくなったら、こんな資料もあるんだ」くらいに覚えておけばOKです。

今回紹介するワールド

ボイストレーニングワールド♪歌声レッスンブック♪ #教科書ワールド
https://cluster.mu/w/ff40d68c-4e37-4187-b03c-da3db415ab97

こちらのワールドで実際扱っているギミックや構成をメインに、紹介していきたいと思います。
気になった方は、実際にワールドを訪れてチェックしてみて下さいね。

ワールドの構成について

次にワールドの構成についてです。
今回のワールドはBOOTHで購入したアセット(3Dデータ)+Blender作成した自作の3Dデータを組み合わせて作成しています。

初心者の方にオススメなのが、BOOTHです。
カテゴリ「3Dモデル」、サブカテゴリ「3D環境・ワールド」で探して頂くと、メタバースのワールドで制作できるワールドや装飾品が出てきます。

ワールドの多くはVRChatという別のメタバースサービス向けに作られていますが、clusterのワールドとしても転用可能です。(※ギミック系はclusterの仕様とは違うので動かない可能性が高いです!!)

clusterで気軽に使いたい場合は「cluster向け」や「cluster対応」といった記載を目安に、購入してみると良いかもしれません。

また、UnityAssetStoreという、Unityの公式ストアもあります。

ちなみに私も、ちょこっとですが、装飾品やcluster対応のアイテムをBOOTHで出品しています↓
https://seironsyugi.booth.pm/

次に、Hierarchyの説明です。
Hierarchyとは、ワールドにあるものをツリー状に整理して管理する場所です。
要は、フォルダみたいなものですが、フォルダとはちょっと違うらしいです。

↓Guideにも、Hierarchyに関しての解説がありますので合わせてご確認ください。

CHiHAYA
CHiHAYA

ちなみに、Unityでは日本語名を使ってはいけないわけではないのですが、諸々の事情から英語の方が良いらしいです。
私は自分のわかりやすさを優先して日本語にしています。

とても参考になる『桜井政博のゲーム作るには』

ゲームディレクターの桜井政博さんのYoutubeチャンネル『桜井政博のゲーム作るには』は、ワールド作りにも応用できる情報がたくさんあります。
ファイル名の付け方の動画もあるので、ぜひ見て欲しいです!

そして、今回のワールドの場合のHierarchyはこんな感じ↓

・天井
・スポーン関係
・サブ音声
・コライダー類
・基礎_スポーン部屋
・基礎_ポイストレーニングエリア
・ギミック_ワールドオプション
・ギミック_ミーティングモード
・装飾_黒板3
・装飾_控室
・装飾_机の上の文房具
・装飾_中庭
・———-イベント会場モードの時消すもの———-
・ギミック_ポイント
・装飾_入り口の木_ポイ用
・装飾_付箋_入り口
・装飾_付箋_控室
・———-イベント会場モードの時追加するもの———-
・入り口の木_表紙紙無地

順を追って説明していきましょう

天井

自作ワールド側の天井です。
単純に、「天井があると邪魔だなぁ」と思って、一括で非表示にしたい事が多いので、別枠の一番上にしています。
再表示を忘れがちで、ワールドをアップした時に天井が無い事も多々あります。

スポーン関係・サブ音声・コライダー

次に上部にあるのが、ワールドを構成する大事な要素(ギミック?)類です。
一度設定したら、あまり触らない部分ですね。

ただ、スポーン位置などは、ワープギミックが多いワールドはSpawnもワープのギミックもまとめて「ワープ関係」というカテゴリを作る場合もあります。

現在は「コライダー類」とコライダーを分けていますが、3Dのメッシュに沿ったコライダーの場合は「基礎」の下の階層に入れたり、「装飾」の下の階層にいれたりすることもあります。
今回は、BOXでコライダーをざっくり作っているので、別の階層にまとめています。

コライダーがどこに入っているかの図↓

これらの要素の実装や解説は下記を参照ください↓

ワールド基礎部分

次に、ワールドの基礎?となるメインの建築部分です。

今回のワールドは初期スポーンに大きな部屋-それを繋ぐ扉-ボイストレーニングエリアの3構成になっています。

後述しますが、扉部分は諸事情で、並び順下の方に追いやっています。

スポーン部屋は購入したアセットを利用、ボイストレーニングエリアはBlenderで作ったものを利用しています。

ここの階層分けは「一括で動かしたいもの」でまとめる事が多いです。

CHiHAYA
CHiHAYA

例えば、「柱全体の位置を後方にしたい」「壁だけ一時的に非表示にしたい」など、作業中にやりたいことが出てくるので、それに合わせてまとめる感じですね。

ギミック

実は、ここが一番の難所だと思います。

今回のワールドには、主に「ボイストレーニング用のギミック」「ワールドオプションとしてのギミック」「控え室用の簡単なギミック」がありますが、構成などはこれで正解かわかりません。

この項目は長くなってしまいますが、可能な限り解説してきたいと思います。

オプションを管理するギミック類

ステージ裏のオプションを管理する操作室から説明します。

ここの説明が難しいのですが、スタッフ用のコライダーやイス・ピアノといったオブジェクト、スクリーン等のオンオフを管理するところです。

StandardMainScreen_2はスクリーンの事です。
今現在何が表示されているのかスタッフ側も確認したい事が多いので、こちらの操作室に配置しています。

こちらのコンセプトは、「ONとOFFがわかりにくいと他のワールドで散々言われ、だったらこれならわかるだろ!!」です。
ヤケクソではありますが、かなりわかりやすい内容です。

こういった「わかりやすさ」とは「ユーザビリティ」だったり「フィードバック」とも言ったりしますね。これもまた奥が深い!

今回は、
・「ONのみスイッチ」「OFFのみスイッチ」を実装
・現在の状態が分かるように「状態」を配置
・オプションの内容のメモを記載
といった設計をしてみました。

押したらON、もう一度押したらOFF、といったスイッチ(トグルスイッチ)もありますが、今回はわかりやすさ優先のヤケクソなので採用してません。

まず、スイッチの説明は後回し、下記の「スイッチを押したことで出現したり、消えたりするもの」について解説します。

例えば、01_黒板をスクリーンとして使うは「1つめのスイッチを押した時に、操作したいもの」を入れています。

手順としては、最初にhierarchyを右クリックし「Create Empty」を押し、空の「GameObject」を作ります。
「GameObject」の名前を「01_黒板をスクリーンとして使う」に変更し、「Add Compopnent」から、「Set Game Object Active Gimmick(Script)」を呼び出します。

Keyの部分は文字通り「これが鍵」と覚えればOKです。
最初は、別のスクリプトからこのKeyが呼び出されると、この階層がONになったりOFFになったりすると覚えておけば全てOKです。

01_黒板をスクリーンとして使う
 スクリーン(黒板の上からかぶせるように配置しています)
 ONの記載(状態のところに「ON」の表示が出る)

……という構成になっており、Keyの「Option01」がONになると、「スクリーンが表示される」「状態の所にONが表示される」というギミックが発動します。

次に、「01OFF」には、単純に「状態のところに「OFF」の表示が出るようにしています。

文字は「Add Compopnent」から、「TextView コンポーネント」を付けることで、ユーザーに見える文字をワールドに置くことができます。

参考:TextView コンポーネント(空間上に文字を描画する方法)
https://docs.cluster.mu/creatorkit/world-components/text-view

次にスイッチの説明です。

「スイッチ」の部分には、背面の黒板風の板・スイッチ類・テキストを入れてあります。

さらに「ONスイッチ01」は実際に押して稼働する部分なのですが、その下に「ON」の表記(赤いスイッチに白文字で表示されている部分)を入れてあります。
この理由は、スイッチを動かすとき、文字も一緒に動かした方が便利だからです。

次にスイッチ部分のギミックの説明です。

大事な要素は2つ、
・コライダーを入れる事
上記のBox Colliderを入れないと、スイッチが選択できません。

・Interact Item Triger(Script)を入れる事
スイッチ類が良くわからない、という方は上記の画像そのまま真似してみてください。

このスイッチには2つの効果を入れていて、
①Option01(オンオフにしたいオブジェクトが入っているところ)をONにする
②OptionOFF01をOFFにする
という挙動をします。

Boolにチェックが入っていればKeyをON、チェックが無ければKeyをOFF
これだけ覚えて下さい。

簡単に言うと「01のオプションを出す、状態にONを表示する、状態にOFFが表示されているのは消す」となるので、見た目上はオプションが表示されて、状態のON/OFFが切り替わるのです。

OFFの方のスイッチはこの逆の設定をしています↓

また、スイッチに関する解説は下記も参照ください
トグルスイッチの解説もこちらにあります↓

このワールド内に設置してある、オプションのスタッフのみ入れるコライダーの作り方は下記を参照ください↓

控室の簡単なギミック

控室の黒板には、4つの表示を切り替えられるギミックを入れています。

控室を会議室として使えるよう「打ち合わせに使えるボード」「振り返りに使えるボード」が表示されたり「これからロビーライブ」などの写真用スポットになったりもします。

↓構成はこんな感じ

オプションギミックと被るので割愛しますが、スイッチとしては01~04までのギミックをそれぞれONにするかOFFにするかの設定になります。
Keyは4つですが、全消しを含めてボタンは5つになります。

黒板を消す(全てOFF)↓

01_打ち合わせモードを表示する(他はOFF)↓

こういったスイッチを作成することで「選んだもの以外は全部OFF」というスイッチことができます。見た目上はスムーズに切り替わっていますが、やり方としては脳筋です。

初期のON/OFF管理について

また、hierarchyでグレーになっている部分があると思います。
ここは、Set Game Object Active Gimmick(Script)でKeyを設定している部分なのですが、Inspectorのチェックを外すことで、「ワールドアップ時にはOFFにしておく」ということも可能です。

先ほどのワールドオプションも、全てOFFなのではなく、「これはONにしておいた方が便利だなぁ」というものはONにして、「これは人によるなぁ」「イベント時は付けたいけど、スペースには要らないなぁ」というものはOFFにしてあります。

↑状態は常に表示したいので、01をOFFにしたいなら、オブジェクト入りの01はチェックを外す、01OFFはチェックを入れる、といった運用にしてます。

ボイトレギミックについて

このギミックもやや複雑ですが、一つ一つはとても単純です。

まず、メインとなる4つのメニューをワールドに表示させておきます。
例えば、「準備運動」と書かれたスイッチは、内部的には「スイッチ01_準備運動」というスイッチでそれを押すと、menu01というKeyが紐づいています。menu01の下層には「準備運動」のギミックがさらに入っています。

言葉にすると長くなりますが、「それぞれのメニューを切り替え、ギミックを出す」といった挙動をしています。

CHiHAYA
CHiHAYA

また、隠しメニューとして、黒板消しを押すと初期状態(menu05)に戻ることもできるようにしています。

準備運動の内容も、実は同じことをやっています。

ここは単純に、Key「Warmup01~04」の切り替えです。

次の、「リズム練習」では、音を再生するギミックが入っています。

①~⑤のリズムメニューを選べるのですが、この切り替えは他と同様です。
画像のみにして、説明は省きます。

メニューを切り替えるスイッチの見本↓

①のボタンをONにすると、「再生/停止ボタン」「①の下の赤ライン」「黒板に表示するスライド」の3点が表示されるようになります。

再生/停止ボタン自体にはスイッチ機能、音楽をオンオフする機能を付けています。その階層の下に「再生/停止」のテキストと、AudioPositionをつけています。

まず、音楽を再生する機能について解説します。

このボタン自体に大切なのは
・BoxCollider
・Item(Script)→他を入れると自動で入るので触らなくてOK
・Item Audio Set List(Script)
  Id:音源版のKeyみたいなもの
  Audio Clip:ここに音源を入れる(.mp3とか)
  Loop:今回は1分強の音源を一度のみ再生させたいのでチェックは無し
      繰り返したい時はチェックを入れる
・Scriptable Item(Script)
  ※コードのconst se = $.audio(“〇〇〇”);→ここにtem Audio Set List(Script)のIdを入れる。

Scriptable Item(Script)の部分は、
下記ガイドの「Scriptable Itemで音を鳴らそう!【コピペで使えるサンプルコード付き】」の「音源の位置を変える」のコードを丸っとコピーしています。
このコードには、「一度クリックして再生、もう一度押すと停止」という機能と、「AudioPosition」というオブジェクトから音を発生させる、という効果があります。

なぜ、AudioPositionを設定したかというと、これを設定しないと、ボタンを押した場所が音源(そこにスピーカーを置いたような聞こえ方)になるので、ボタンを操作している人は聞きやすいですが、反対側に居る人はとても音が小さく聞こえてしまいます。

AudioPositionの実際の場所はステージ中央あたりに設定しています↑
黒板上部のスピーカーの所にも、アイコンがついていますが、これはサブ音声の設置場所です
(今回のワールドは全域に同じ聞こえ方をするよう設定しているので、別にここじゃなくてもOKなんですが)

次に音感トレーニングのギミックです。

ほぼリズム練習の部分とやっている事はかわらないので、そこの説明は省きますが、主な変更点は「Blenderで鍵盤を作って、透明なボタンが別にある事」「スイッチは、再生して消して、という挙動ではなく連続で押せること(ドドドドド~と連打できる)」の2点です。

「Blenderで鍵盤を作って、透明なボタンが別にある事」は別に必須ではありません。
しかし、それが便利な事もあるのです。

もっと詳しく解説すると、現在の透明ボタンは「ド」「ド#」の緑の枠の部分です。

たとえば、白鍵盤自体にBoxColliderを入れてしまうと、「ファ」の青ライン部分にColliderが入ってしまいます。
BoxColliderは文字通り、オブジェクトに対して四角いコライダーを入れてしまうので……
これではボタン同士が干渉してしまいます。

また、MeshCollider(オブジェクトの見た目通りにコライダーを入れる)という方法もあります。その場合、「シ」の赤ラインのような入り方をします。
これでも良いのですが、スマホやVR操作などを考えると「白鍵と黒鍵の位置が近く、誤操作を起こしやすい」といった不具合が発生する可能性が高くなるのです。

CHiHAYA
CHiHAYA

なんでこんな風にしたんだっけ?と思い返すと、色々な事がつまってますね。

スイッチの解説に戻ります。ここで大切なのは、
・MeshRndere→見えるか、見えないかの部分。チェックを外しています。
・BoxCollider
・Item(Script)→他を入れると自動で入るので触らなくてOK
・Item Audio Set List(Script)
  Id:音源版のKeyみたいなもの
  Audio Clip:ここに音源を入れる(.mp3とか)
  Loop:今回は1分強の音源を一度のみ再生させたいのでチェックは無し
      繰り返したい時はチェックを入れる
・Scriptable Item(Script)
  ※コードのconst se = $.audio(“〇〇〇”);→ここにtem Audio Set List(Script)のIdを入れる。

Scriptable Item(Script)の部分ですが、AudioPositionから音を鳴らしつつ、音源はONにしたら連続で再生(ドドドドド~)が出来るよう、サンプルコードから少し変更しています。

const se = $.audio("Audio01");
const audioPosition = $.subNode("AudioPosition");

$.onInteract(() => {
 se.attach(audioPosition);
    se.play();
});

最後に「ボイストレーニング」のメニューですが、メニュー数が増えただけでやっていることは「リズム練習」と同じです。

各種装飾について

装飾については、「それ自体をまとめて動かしたいか」「単品でも動かしたくなった時、どこにあるかすぐわかるか」というカテゴライズをしています。

今回の場合の分け方は↓
・装飾_黒板
・装飾_控室
・装飾_机の上の文房具
・装飾_中庭
・装飾_入口の本_ボイトレ用
・装飾_付箋_入口
・装飾_付箋_控室
・装飾_入口の本_表紙無地

マジックミラーの簡単な作り方

この部分、奥のスタッフのみの部分に入る前には、マジックミラー式の壁を置いています。

CHiHAYA
CHiHAYA

元々Blender上では、ワールド装飾の柱がもっと太く、客席からの視線を遮る構造だったのですが……、最終的に小さくなった影響でこの出入り口が丸見えになってしまいました……

作り方はとっても簡単。下記の画像をご確認ください。
このオブジェクトは、初期状態で既にマジックミラーです。

↓逆に、裏側からはどこに壁があるのか見えなくなってしまうので、スタッフ向けの注意書きを追加しています。

黒板裏も、マジックミラー方式で、裏側から客席を広く見渡せるようになっているのですが、これはBlenderで似たようなことをやっています。
表面から見ると、全然わかりませんよね。

一つのUnityデータで二つの会場を作りたい場合

今回は「ボイストレーニングワールドでありつつ、普段のイベント利用にも使用できるワールド作り」を目指しました。
一応、ボイストレーニングワールドでもイベント利用は出来るのですが、音源やスライドの容量が少し多いためボイトレに用が無い場合は、ただただ無駄なデータになってしまいます。

CHiHAYA
CHiHAYA

これでもめっちゃ圧縮したんですが、長い音源が多いので限界があります。

派生ワールドとして、下記をアップするために、「自分にわかりやすい構造」にしてみました。

https://cluster.mu/w/bab0e2b2-9bc9-4a5e-ba19-947153f083dc

↑まず、hierarchyでは、どちらのモードで使用するかを明確にしておきます。
 (まぁ、これでもよく出し忘れたり、しまい忘れたりするのですが)

このあたりも、慣れないと階層の下の下の下に配置したアイテムをいちいち探してオンオフしなければなりません。(たぶん一括で設定できる方法はあるんでしょうが)

ここで大事なのは、先ほどのボタンでのオンオフなどではなく「ワールドアップ時にその項目を除外する」という設定が必要になります。

まず、inspectorで、チェックを外すこと(赤丸)によって作業時には見えなくします。

今回入口となる本の扉は「ボイトレ用」と「無地」の2種類あるので、作業したいモードの方以外は消しています。

次に大事なのが、青四角の部分、Tagを「EditorOnly」にすること。これをすることで、ワールドアップ時はこの階層のものが丸ごと除外?されてアップされます。
戻したい場合は、初期の「Untagged」にしましょう)

CHiHAYA
CHiHAYA

ちなみに「——-イベント会場モードの時追加するもの——–」というのは、わかりやすく、区切り線で使っているだけで意味はまったくありません。

???

そして余った最後の「GameObject」。
たぶん意味ない空データなんでしょうが、怖くて消せないので放置しています。

さいごに

ここまで読んでいただき、ありがとうございました!

今回は、実際に私が制作したワールドを例に、Hierarchyの構成から、ワールドの基礎部分、そして実際に使っているギミックまで、できるだけ一通り紹介してみました。

一つ一つのギミックについては、公式の解説や先人の方々の記事など、参考になる情報がたくさんあります。

ただ、「このギミックの作り方は分かったけど、実際のワールドではどういうふうに組み合わせているんだろう?」という部分は、案外分かりにくかったりします。

そこで今回は、ちょっと長くなってしまいましたが、「実際のワールドがどういう構成になっているのか」まで含めて、できるだけ全部見せてみました。

もちろん、私のやり方が正解というわけではありません。

「こういうふうにまとめておくと後から触りやすいんだな」
「このギミックとこのギミックを組み合わせると、こんなことができるんだな」くらいの参考になれば嬉しいです。

そして何より、「Unityなんもわからんけど、とりあえず何か作ってみようかな」と思ってもらえたら、この記事を書いた甲斐があります。

CHiHAYA
CHiHAYA

最後になんですが、全部読むと大変なので、読み流して下さい。

UnityやCCKは、全部を理解してからワールドを作り始める必要はありません。

私自身、いまだによく分かっていない部分がたくさんあります。
むしろ、これを読んだ上級者からは「初心者ってこの程度の理解でやってるのか……」とあきれられてしまうことでしょう。でもこれが現実です。

それでも、「こうしたい!」から逆算して調べたり、試したり、失敗したりしているうちに、少しずつできることが増えていきました。

この記事が、そんな「次の一歩」のきっかけになれば幸いです。

それでは、よいワールド制作を!

Xからコメントをお待ちしています。
ブログ更新の励みになります!
記事URLをコピーしました