Author Archives: lovewcycle

clusterゲームワールドコンテスト2020 制作記

cluster ゲームワールドコンテスト 2020に参加したのでワールドの製作にあたって工夫したところなどをメモしておきます。

cluster ゲームワールドコンテスト 2020

2020年6月4日(木)、ゲーム作成機能がリリースされたバーチャルSNS「cluster」にゲームワールドを投稿して己のアイデアと技術力を最大限に発揮しよう!本企画ではゲームワールドコンテストとして「創造力」「何度でも楽しめる」「熱量」の3つの観点からご応募されたワールドの審査を行い、各賞および協賛賞を決定致します。更に!「ゲームワールド投稿応援キャンペーン」として、ユニティ・テクノロジーズ…

完成した作品

ClusterをインストールしているPC/スマートフォン機器からワールドに入れます。
最大四人でレースゲームができます。一人でも動作します

ClusterKart|バーチャルSNS cluster(クラスター)

カートに乗ってレースで勝負だ!最大4人で対戦可能!一位を目指して走り抜けろ!

工夫したところ

車の操縦

本来ならばレースゲームはキャラクターが車の上に乗って操縦するのが一般的なのですが
Clusterでは動くオブジェクトの上にプレイヤーがいても動きが同期されずに足場だけが動いてしまうという問題があります。

その問題を解消するため プレイヤーの動きに応じて別の場所にある車を動かすことで疑似的にレースゲームを実装しました

画像のようにプレイヤーが色のついたブロックに触れることで別の場所にあるカメラを付けた車が動きます。
また、カメラのFOVを大きめに設定してあまりスピードが出てなくても早く動いているように見えるようにしています。

操縦席入り口


写真のようにプレイヤーが操縦席に移動するときに複数のプレイヤーがかぶったりしてしまうと予期せぬ動作の原因になるため
操縦席には一人しか入れないという制限を設けています。
プレイヤーに伝えるためにカートを置いてそれにインタラクトするとワープします
ワープしたカートには運転手のモデルを表示してインタラクトできなくしました。
上の写真は青色のカートにはほかのプレイヤーが乗っている状態です。

ちなみにこれはレース終了後リセットボタンを押すと再びアクセスできるようになります

レース開始のカウントダウン

レース開始時に3秒のカウントダウンが表示されます
ワールドを作った時にはタイマーのような機能を持ったコンポーネントがありませんでした。
そのためアニメーションを使ってタイマーを実装しました。

写真のように赤いボックスと下の灰色のシリンダーを親子関係にして置き、シリンダーの方に回転するだけのアニメーションを設定しておきます。
赤いボックスが回転して白いボックスに接触したときに任意のアクションをトリガーすることで好きなタイミングで実行できます。
回転して元の角度に戻るようにしておけば何度でも動作するし、時間やアクションの数の変更が容易なのでタイマーの実装方針としては良いかと思います

ちなみに画像では右側のタイマーが待機時間になっていて、最初に右が回っていき、白いボックスに接触すると左のタイマが始動して
カウントダウンを表示します。

時間、分、秒でタイマーを分けて作っておけば時計も簡単にできるかと思います。

観客席周り

レースに参加しないプレイヤーたちが快適に観戦できるようにも工夫しています
clusterにはダッシュなどの移動速度を変更する方法が無いため歩いて移動するのはとても大変で、レースを観戦することができないため
ワールドの各所にインタラクトするとワープすることができる赤色のCubeを置いてあります
具体的には画像のようにレースのコースに沿って配置されているのでインタラクトしていくだけでレースの状況を見ることができます

ぜひ実際にワールドに行って体験して下さい。

そのうち直すかもしれないところ

遊び方回り

遊び方の説明看板などを作る時間がなかったため最低限の物しか作れなかったので
ユーザーに遊び方が伝わりにくいかなぁと思っています。
その辺直したいです

車の操縦方法

当たり判定で操縦をしているとどうしても練習が必要になってきてしまうので
インタラクティブなオブジェクトを作ってそれの傾きに応じて操縦できる等にした方が良いかなぁと思っています。

まとめ

今回のコンテストで初めてClusterのワールドを作成したのですが
ドキュメント周りがしっかりしていてSDKにサンプルシーンも入ってるので
特に躓くことなく制作することができました。
ノンコーディングでコンポーネントを付けて実装しないといけない部分は少し大変だなぁと思いましたが
プログラマじゃない人たちにもとっつきやすいからまあいいのでないのでしょうか
将来的にはランタイムでコードも動くようになればもっともっと可能性が広がるので期待しています。

Unity2019でアニメーションがおかしくなった話

イマイです

Unity2019LTSが発表されたので早速新規プロジェクトにも導入してみたのですが
モデルのインポート周りでうまくいかなかったよってことを書いておきます

発生していた問題

モデルにボーンアニメーションをつけてインポートしてEditor上で再生してみたところ
モデリングソフトの挙動と違う…!
となっていました

Unity2018で確認したところ問題なく再生されておりエディタのインポート設定が怪しいなと思いました。

解消方法と原因
この問題が発生していた原因は
インポートしたモデルの頂点のボーンの影響数が2を超えていたところにありました。

モデルのインポート設定のRigのメニューでは
SKinWeightがStandard4 (Bones) になっており
問題ないように見えるのですが

Edit > ProjectSettingのQualityの項目をみてみると…

デフォルトで2Bonesに設定されている!
(ちなみに2018だと4Bonesでした)

ここを4Bonesに設定し直すことで問題なくアニメーションが再生されました。
めでたしめでたし。

プロジェクトの初期設定でURPを選択しているとここが2Bonesにデフォルト設定されることが今回の問題の原因だと考えられます。
ライトな端末向けだから自動でインポート設定もライトにされちゃうんですね〜

影響が2Boneでアニメーションってかなり難しいと思うんですがこの辺Unityはどう思ってるんでしょうかねぇ…?

第4回UnityでARkit2アプリを作る!~面積測定アプリを作る~

こんにちはイマイです
少し空きましたが前回の続きのARKitで面積の測定するアプリを作っていこうと思います。

最終的にはこんな感じになります


面積を求める

前回は2点の距離を求めましたが今回は面積を求めてみようと思います
三点の面積の求め方は前の記事で書いた通りです。
こちらからご覧ください

Unityで面積を求めたい 3Dの場合

こんにちはイマイです 最近書いてあるARKitのアプリで3次次元空間の3点で作れる面の面積を求めたいなぁと 思ったので実装方法を考えてみました。 調べてみると公式見当たりませんでしたね… (ご存知の方がいましたらご教授ください) 以下のサイトをみると意外と簡単にベクトルを使って計算できるみたいなんで実装してみました。

第二回で作ったコードに少し手を加え、面積を表示するプログラムを追加します
前回からの変更点があるところをピックアップして表示します。

ボタンを押した回数に応じて処理を変更

	public void ClickPlaceButton(){
		switch (Click){
			case 1:
			PlaceMarker();
			break;

			case 2:
			PlaceMarker();
			CalculateDistance();
			break;

			case 3:
			PlaceMarker();
			CalculateArea();
			break;

			case 4:
			Reset();
			break;
		}
	}

ボタンを押した回数に応じて処理を変更しています。
1回目:マーカーをセット
2回目:マーカーをセット 距離を表示
3回目:マーカーをセット 面積を表示
4回目:マーカーを消去

今回は回数が少ないのでcaseを使いましたがもっと多くなる場合には配列とかを使った方がスマートになるかと思います。

面積を計算して表示する

	public void CalculateArea(){
		Vector3 pos1 = list_toggle_[0].transform.position;
		Vector3 pos2 = list_toggle_[1].transform.position;
		Vector3 pos3 = list_toggle_[2].transform.position;
		
		Vector3 D = Vector3.Cross(pos2-pos1,pos3-pos1);
		float S = D.magnitude / 2;

		DisplayText.text = "3点の面積"+(S/2).ToString("f2")+"m^2";
	}

ベクトルで面積を計算後画上に表示しています。

細かな設定などはここで説明すると時間がかかってしまうので
一式をGithubにアップロードしましたので気になる方は各自でダウンロードして動かしてみてください!
こちらから確認できます
(ARKitPlugInを導入していない関係でマーカーのオブジェクトと認識した床はシェーダーで書いてみました。)

実行環境は第一回に書いた通りです
また、Githubに上げているファイルの中身にはARKitPugInが入っていないので自分で入れてくださいね!
うまくやればn角形の面積や、見た目を調整して線を表示したり、面に色を塗れば立派なアプリになるかと思います!

ARKitで距離測定などをするアプリの解説は今回で最後にしたいと思います〜
次回以降はARKitを使った別のアプリを書いていく予定です

それでは今回はここまで
良いハッキングライフを〜