はじめに
概要
作品名 | TOYAMA by ModelingX-JP |
制作期間 | 2023.01.27~2023.06.24 (約5ヶ月) |
制作形式 | 受注制作 |
受注金額 | 0円 |
当作品は「株式会社ModelingX」の所有物であり、ワールドの仕様を全てミーティングで決めた為、製作期間は約5ヶ月となっているが、実際の作業時間は1ヶ月程である
備考
- 当作品は個人制作ではなく「株式会社ModelingX」での自社開発に当たる為、「株式会社ModelingX」の所有物である
- ドームテントや天門橋、高台などの3Dモデルは他者に依頼して制作して頂いた物である
- このワールドはグラフィックではなくギミック・性能を重視したワールドである
外部リンク
このプロジェクトは「GitHub」にありますが、アセットの再配布に当たらない様にする為にリポジトリの可視性をプライベートにしています。どうしてもプロジェクトのソースをご覧になりたい場合はページ下の「お問い合わせ」から個別にご連絡下さい。
PV
グラフィック修正前
グラフィック修正後
内容
出来るようになった事
- 「[UdonBehaviourSyncMode()]」を使用した、クラスの同期の可否の設定
- 「VRCInstantiate()」を使用した、ゲームオブジェクトの生成
- 「VRCPlayerApi.GetTrackingData()」を使用した、プレイヤーのアバターの各部位の情報の取得
- 「VRCPlayerApi.TrackingData.position」を使用した、プレイヤーのアバターの各部位の座標の取得
- 「VRCPlayerApi.TrackingData.rotation」を使用した、プレイヤーのアバターの各部位の角度の取得
- 「DateTime.Now」を使用した、現在時刻の取得
- 「DateTime.ToString()」を使用した、時刻の表示形式の変更
- 「Array.Copy()」を使用した、配列の複製
- 「VRCPlayerApi.GetPosition()」を使用した、プレイヤーの座標の取得
- 「[UdonSynced]」を使用した、同期変数の登録
- 「Networking.IsOwner()」を使用した、「そのゲームオブジェクトの所有者がローカルプレイヤーかどうか」の取得
- 「RequestSerialization()」を使用した、変数の同期の要請
- 「VRCPlayerApi.IsValid()」を使用した、「プレイヤーが有効かどうか」の取得
- 「OnPlayerJoined()」を使用した、新たにプレイヤーが入室した際の処理の記述
- 「DateTime.UtcNow.Ticks」を使用した、基準時刻からの経過時間の取得
- 「OnPlayerLeft()」を使用した、プレイヤーが退室した際の処理の記述
- 「OnDeserialization()」を使用した、同期変数の値が変更された際の処理の記述
- 「string.IsNullOrEmpty()」を使用した、文字列の状態(空or空白)の取得
- 「DateTime.ToLocalTime()」を使用した、現地時刻への変換
- 「Networking.SetOwner()」を使用した、ゲームオブジェクトの所有者の設定
- 「OnPickupUseDown()」を使用した、ローカルプレイヤーがゲームオブジェクトを掴んでトリガーを押した際の処理の記述
- 「OnPickupUseUp()」を使用した、ローカルプレイヤーがゲームオブジェクトを掴んでトリガーを離した際の処理の記述
- 「VRCPlayerApi.playerId」を使用した、プレイヤーIDの取得
- 「VRCPlayerApi.GetPlayerById()」を使用した、プレイヤーIDによるプレイヤーの取得
- 「VRCPlayerApi.GetPlayerCount()」を使用した、現在のプレイヤー数の取得
- 「VRCPlayerApi.GetPlayers()」を使用した、「Player」の配列の取得
- 「VRCPlayerApi.SetVoiceDistanceNear()」を使用した、近距離での音声の大きさの設定
- 「VRCPlayerApi.SetVoiceDistanceFar()」を使用した、遠距離での音声の大きさの設定
- 「VRCPlayerApi.SetVoiceVolumetricRadius()」を使用した、音声の大きさが変化する距離の設定
- 「OnPickup()」を使用した、ローカルプレイヤーがゲームオブジェクトを掴んだ際の処理の記述
- 「OnDrop()」を使用した、ローカルプレイヤーがゲームオブジェクトを離した際の処理の記述
- 「Interact()」を使用した、ローカルプレイヤーがゲームオブジェクトを選択した際の処理の記述
- 「SendCustomNetworkEvent()」を使用した、RPCの実行
- 「Array.IndexOf()」を使用した、配列の要素番号の取得
- 「LineRenderer.GetPosition()」を使用した、線の座標の取得
- 「LineRenderer.startColor」を使用した、線の描画開始時の色の取得・設定
- 「LineRenderer.endColor」を使用した、線の描画終了時の色の取得・設定
- 「LineRenderer.positionCount」を使用した、記録されている線の座標の数の取得
- 「LineRenderer.SetPosition()」を使用した、線の座標の記録
- 「VRC_Pickup.UseText」を使用した、ゲームオブジェクト選択時の表示テキストの設定
- 「BaseVRCVideoPlayer.Pause()」を使用した、動画の一時停止
- 「BaseVRCVideoPlayer.Play()」を使用した、動画の再生
- 「BaseVRCVideoPlayer.SetTime()」を使用した、動画の再生時間の設定
- 「BaseVRCVideoPlayer.GetTime()」を使用した、動画の再生時間の取得
- 「BaseVRCVideoPlayer.GetDuration()」を使用した、動画の長さ(時間)の取得
- 「OnVideoEnd()」を使用した、動画の再生が終了した際の処理の記述
- 「OnVideoStart()」を使用した、動画の再生が開始された際の処理の記述
- 「BaseVRCVideoPlayer.Stop()」を使用した、動画の停止
- 「BaseVRCVideoPlayer.PlayURL()」を使用した、URLを基にした動画の再生
- 「VRCUrlInputFileld.GetUrl()」を使用した、入力されたURLの取得
- 「DateTime.TotalSeconds」を使用した、時間の合計秒数の取得
- 「Post Processing」を使用した、エフェクトの追加
工夫した点
- デバッグする際、「Unity」エディターのコンソールウィンドウを使用できなかった為、常にローカルプレイヤーの頭に追従するHMD対応の疑似UIを作成した
- ペンで小まめに「LineRenderer」コンポーネント付きゲームオブジェクトを生成して使用する事で、消しゴムを用いて細かな修正を可能にした
- ワールドへの参加直後に複数の動画プレイヤーが存在すると正常に動作しなくなってしまう為、一定時間置きに各動画プレイヤーを活性化するようにした
- LODを用いる事で、ワールドの見た目を維持したまま、ワールドの描画処理の負荷を軽減した
- 「OnDeserialization()」を使用する事で、必要最低限の回数だけ同期するようにした
- ガイド用NPCの上部の吹き出しを常にプレイヤーの頭の方向に向けさせる事で、吹き出しの内容を読み易くした
- ドームテントに内側からしか開閉できないドアを設ける事で、プライベートな空間を作り出せるようにした
コメント