1 of 53

の勉強会

2 of 53

AGENDA

  • 前説
  • サンプルを動かそう
  • サンプルの仕組み
  • Q & A

3 of 53

講師 Smith

影の支配者 Swanman

4 of 53

前説

5 of 53

今日の勉強会は

  • cluster を起動してサンプルワールドに入ったり
  • Unity のサンプルプロジェクトの中身を見たりします
  • 発言はボイスでもテキストでも OK
  • 質問はいつでも大丈夫です

6 of 53

テキストチャット

7 of 53

今日のゴール

  • プロトコルがどのようなものかわかる
  • サンプルの改変どころがわかる
  • スクリプトがわかった気になる

8 of 53

タグ

この勉強会ではページ毎に以下の 3つを明示します。

お題のプロトコルの知識

お題の知識

スクリプトの知識

改変の知識

サンプル改変のための知識

スクリプトの知識

9 of 53

準備

10 of 53

準備

サンプルプロジェクトを

  • ダウンロードする
  • Unity で開けるようにしておく

11 of 53

サンプルプロジェクトをダウンロードする

github ページを開き、緑色の Code のプルダウンをクリック

https://github.com/dolow/ProtocolSample

12 of 53

サンプルプロジェクトをダウンロードする

「Download ZIP」をクリック、ダウンロードしたら任意のディレクトリに伸長する

13 of 53

Unity で開けるようにしておく

Unity Hub から Add > Add project from disk > zip に入っていたプロジェクトディレクトリ

14 of 53

Unity で開けるようにしておく

音声ファイルだけ再配布禁止の素材を使っています。

Discord 上で個別にお渡しします。

  • zip を展開する
  • 中身のファイルを全て Assets/Resources/Sound 配下に配置する

音声素材はコチラから DL したものです。

https://soundeffect-lab.info/

15 of 53

  • 商用利用
  • 改変
  • 二次配布

全部 OK、ただし使用結果への責任は負いかねます

サンプルプロジェクトについて

16 of 53

まずはサンプルを見てみよう

お題の知識

17 of 53

まずはサンプルを見てみよう

「2024/12/5 ゆるゲームジャム勉強会 / 攻撃ができるアイテム サンプル」

https://cluster.mu/w/55c55ac8-218d-4e6e-b268-778b25129c4a

お題の知識

18 of 53

まずはサンプルを見てみよう

メッセージ受信側

メッセージ送信側

の2種類のアイテムがある。

まずは

メッセージ送信側

のアイテムを触って、それっぽい動きをしてみよう。

お題の知識

19 of 53

まずはサンプルを見てみよう

メッセージ受信側

メッセージ送信側

damage

ダメージを与えるときはプロトコルに則ってメッセージを送っている

お題の知識

20 of 53

まずはサンプルを見てみよう

お題の知識

ぶつかった時

詠唱が終わった時

振り下ろしている時

ぶつかったアイテムに

周囲のアイテムに

ぶつかったアイテムや

プレイヤーに

いつ

だれに

21 of 53

まずはサンプルを見てみよう

お題の知識

ダメージ値を

テキストで表示する

Y方向に力を加える

ダメージ

表現

22 of 53

プロトコル

プロトコルとは、アイテム間でメッセージを送るための取り決め

メッセージはスクリプトで送受信する

お題の知識

アイテム A

アイテム B

23 of 53

プロトコル

プロトコルは人間が決める

アイテムをつくる人が、プロトコルに応じた動きを自由に決める

お題の知識

damage プロトコル

・ダメージを与えたい

 ときにつかう

・ダメージの数値を送る

これで行きましょう

拝承

24 of 53

プロトコル

プロトコルがないと、どんなメッセージを送ったらよいか、送られてきたメッセージをどう読めばいいか、がわからない

お題の知識

アイテム A

アイテム B

#@?%

なんか言ってるけど

よくわからん

25 of 53

プロトコル

お題の知識

ワールドクラフトは色々なクリエイターのクラフトアイテムを様々なユーザーが持ち寄る場所。

アイテム同士が意思疎通できるプロトコルがあると、空間内にルールができてコラボがはかどる!

このワールドの

プロトコル

・damage

・dance

・move

26 of 53

まとめ

お題の知識

  • プロトコルにはメッセージを送る側と受け取る側がいる
  • メッセージはスクリプトから送られる
  • プロトコルを知っていれば、知らないアイテム同士でも意思疎通できる

27 of 53

サンプルプロジェクトを見てみよう

改変の知識

28 of 53

サンプルの基本構造

改変の知識

prefab を置いてあるだけ!

全て独立したアイテムで、クラフトアイテムとしてもアップロードできます。

※クラフトアイテムの場合、パーティクルやアニメーションの動作は行いません

29 of 53

サンプルの基本構造

改変の知識

剣っぽいやつ

<- スクリプトに必要なものがアタッチされたルート

<- 振るときの効果音用 AudioSource

<- 当たったときの効果音用 AudioSource

<- GrabbableItem の Grip 用 Transform

<- 床から抜けないようにする Collider

<- $.getOverlaps() 用の Collider (trigger on)

<- 見た目の部分

30 of 53

サンプルの基本構造

改変の知識

剣っぽいやつ

Audio Source の AudioClip を差し替える

効果音のカスタマイズ

ModelRoot 配下を好きなモデルに差し替える

Collider と TriggerShape を見た目通りに調整する

Grip (掴む位置) を調整する

見た目のカスタマイズ

31 of 53

サンプルの基本構造

改変の知識

杖っぽいやつ

<- スクリプトに必要なものがアタッチされたルート

<- 詠唱中の効果音用 AudioSource

<- 発動時の効果音用 AudioSource

<- GrabbableItem の Grip 用 Transform

<- 演出用 ParticleSystem

<- 床から抜けないようにする Collider

<- $.getOverlaps() 用の Collider (trigger on)

32 of 53

サンプルの基本構造

改変の知識

杖っぽいやつ

パーティクルのカスタマイズ

好きなパーティクルを炊くようにする

33 of 53

サンプルの基本構造

改変の知識

ボールっぽいやつ

作ってみたけどあんまり prefab の改変の余地はないかも・・・

34 of 53

各サンプルの基本構造

中身の知識

復習

  • サンプルの prefab の効果音やモデルを変えてみよう
  • クラフトアイテムや CCK ワールドとしてアップロードしてみよう

まとめ

  • サンプルは独立した prefab が置いてあるだけ
  • 見た目や効果音やパーティクルがカスタマイズできる

35 of 53

スクリプト解説

スクリプトの知識

36 of 53

基本構造おさらい

スクリプトの知識

プロトコルとは、アイテム間でメッセージを送るための取り決め

今回はダメージを与えた時に damage プロトコルでメッセージを送る

アイテム A

アイテム B

37 of 53

杖っぽいやつの例

  1. プレイヤーが掴む
  2. プレイヤーが使う
  3. いろいろ再生・停止
  4. PlayerScript にメッセージ送信
  5. PlayerScript からメッセージ受信
  6. いろいろ再生
  7. アイテムに damage メッセージ送信
  8. パーティクル停止

処理の流れ

ClusterScript: Resources/ClusterScripts/sender_magick.js

PlayerScript: Resources/ClusterScripts/sender_magick_pcx.js

掴む

メッセージ送信

パーティクル・SE 再生

パーティクル停止

使う

パーティクル・SE制御

メッセージ受信

メッセージ送信

手放す

スクリプトの知識

38 of 53

掴む

メッセージ送信

パーティクル・SE 再生

パーティクル停止

使う

パーティクル・SE制御

メッセージ受信

メッセージ送信

手放す

アニメーション用の PlayerScript をつけている

スクリプトの知識

掴む・手放す処理を渡す API

isGrab が真なら掴む

isGrab がなら手放す

パーティクル停止処理

39 of 53

詠唱中に重複して詠唱開始するのを防ぐ

PlayerScript にメッセージ送信

掴む

メッセージ送信

パーティクル・SE 再生

パーティクル停止

使う

パーティクル・SE制御

メッセージ受信

メッセージ送信

手放す

スクリプトの知識

パーティクル・SE制御

使う処理を渡す API

40 of 53

掴む

パーティクル・SE 再生

パーティクル停止

使う

パーティクル・SE制御

メッセージ受信

メッセージ送信

手放す

スクリプトの知識

メッセージ受信

アニメーション開始

姿勢変更

メッセージ送信

姿勢変更

アニメーション終了

PlayerScript

メッセージ送信

41 of 53

スクリプトの知識

アニメーション開始

姿勢変更

メッセージ送信

姿勢変更

アニメーション終了

PlayerScript

改変ポイント

アニメーションは色々いじれる

メッセージ受信

42 of 53

掴む

メッセージ送信

パーティクル・SE 再生

パーティクル停止

使う

パーティクル・SE制御

メッセージ受信

メッセージ送信

手放す

スクリプトの知識

メッセージ受信時の処理を渡す API

パーティクル・SE再生処理

メッセージ送信対象の抽出

43 of 53

掴む

メッセージ送信

パーティクル・SE 再生

パーティクル停止

使う

パーティクル・SE制御

メッセージ受信

手放す

スクリプトの知識

定期的に行う処理を渡す API

メッセージ送信

メッセージ送信処理

メッセージは一定間隔で送信できる回数が限られている。

このサンプルでは 0.1秒ごとに送っている。

44 of 53

掴む

メッセージ送信

パーティクル・SE 再生

パーティクル停止

使う

パーティクル・SE制御

メッセージ受信

手放す

スクリプトの知識

メッセージ送信

さっきの onUpdate のつづき

パーティクル停止処理

SE と違ってパーティクルは自動的に止まってくれない。

スクリプトで再生秒数を管理して、一定時間以上再生したら止めている。

45 of 53

スクリプトの知識

すぐにできる改変ポイント(19~22行目)

46 of 53

スクリプトの知識

基本的な構文の解説は Resources/ClusterScripts/receiver_display.js の

下部に記載しているので、そちらもあわせて見てみてください。

47 of 53

スクリプト解説

まとめ

  • 杖は PlayerScript にアニメーションを任せている
  • スクリプトは効果音やパーティクルの制御を行っている
  • メッセージは damage を与えるアイテム以外にも送っている

スクリプトの知識

48 of 53

スクリプト解説

復習

  • PlayerScript のアニメーションの長さを変えて、詠唱時間を長くしたり短くしたりしてみよう
  • PlayerScript のダメージが発生するタイミングの設定を変えてみよう

ダメージが発生するアニメーション位置は、アニメーション開始が 0、終了を 1 としたときのダメージ発生タイミングです。

0

1

0.5

0.55 はこのへん

スクリプトの知識

49 of 53

まとめ

50 of 53

まとめ

プロトコルは

  • 未知のアイテム同士でルールに沿った連携ができるもの
  • 自由に決めて自由に実装できるもの

サンプルは

    • クラフトアイテムとしても使える prefab
    • 全く関係のないアイテムの集まり

つくりこむ余地は

無限大!

51 of 53

アンケートのご協力

お願いいたします

52 of 53

Q & A

53 of 53

Q & A