【作品紹介(Unity)】Lighting Demonstration

Unity

はじめに

概要

作品名Lighting Demonstration
制作期間2024.05.14~2024.06.29
(47日)
制作形式自主制作

リンク

プレイ動画

内容

出来るようになった事

  • Resources.Load()」を使用した、Resources フォルダ内のファイルのロード
  • Array.ToList()」を使用した、配列からリストへの変換
  • List.ToArray()」を使用した、リストから配列への変換
  • Dictionary.TryGetValue()」を使用した、辞書型の値からの特定の Key の Value の取得
  • Tween.Kill()」を使用した、DOTween のアニメーションの中止
  • Transform.DOLocalRotate()」を使用した、相対角度のアニメーション
  • GameObject.isStatic」を使用した、「ゲームオブジェクトが静的かどうか」の取得と設定
  • RenderSettings.skybox」を使用した、現在のシーンのスカイボックスの取得と設定
  • Material.SetTexture()」を使用した、マテリアルへのテクスチャの設定
  • Material.SetColor()」を使用した、マテリアルへの色の設定
  • FindObjectsByType()」を使用した、シーン上の特定のクラスの取得
  • SceneManager.loadedSceneCount」を使用した、ロード済みのシーンの数の取得
  • SceneManager.GetActiveScene()」を使用した、現在の Scene の取得
  • Scene.name」を使用した、シーン名の取得と設定
  • SceneManager.UnloadSceneAsync()」を使用した、ロード済みのシーンのアンロード
  • is」を使用した、型の比較
  • IDisposable.Dispose()」を使用した、メモリの開放
  • CharacterController.isGrounded」を使用した、接地判定の取得
  • CharacterController.Move()」を使用した、移動
  • struct」を使用した、構造体の定義
  • AssetBundle.Unload()」を使用した、アセットバンドルのアンロード
  • Application.OpenURL()」を使用した、任意の URL の Web ページの表示
  • Image.color」を使用した、Image への色の取得と設定
  • CanvasGroup.blocksRaycasts」を使用した、Raycast の遮断
  • Slider.OnValueChangedAsObservable()」を使用した、Slider の値が変化した際の処理の記述
  • Mathf.Floor()」を使用した、小数点以下の切り捨て
  • TextMeshProUGUI.fontSize」を使用した、TextMeshPro のフォントサイズの取得と設定
  • ObserveEveryValueChanged()」を使用した、特定の値が変化した際の処理の記述
  • GridLayoutGroup.constraintCount」を使用した、GridLayoutGroup で設定されている列数や行数の取得と設定
  • LayoutGroup.padding」を使用した、パディング値の取得と設定
  • GridLayoutGroup.spacing」を使用した、GridLayoutGroup のセル間のスペースの取得と設定
  • GridLayoutGroup.cellSize」を使用した、GridLayoutGroup のセルのサイズの取得と設定
  • RectTransform.GetWorldCorners()」を使用した、UI の四つ角の絶対座標の取得
  • Debug.LogWarning()」を使用した、警告文の表示
  • EventSystem.current」を使用した、現在有効な EventSystem の取得と設定
  • PointerEventData.position」を使用した、PointerEventData への座標の取得と設定
  • CanvasGroup.interactable」を使用した、CanvasGroup の有効化と無効化の取得と設定
  • SceneManager.sceneUnloaded」を使用した、現在のシーンがアンロードされた際の関数の登録
  • Application.logMessageReceived」を使用した、ログを受け取った際の関数の登録
  • TimeSpan.FromSeconds()」を使用した、秒数を設定されている TimeSpan の取得
  • as」を使用した、参照型への変換

工夫した点

  • Text Mesh Pro の Auto SizeAspect Ratio Fitter 伸縮アンカー等を利用する事で、横画面にしても崩れないような UI 設計にした
  • 定数管理用のクラスのメンバ変数をコード内で初期化するのではなく、インスペクターから編集できるようにする事で、定数を変更する度にコンパイルを挟まなくても済むようにした
  • 作成したスクリプタブルオブジェクトを Resources フォルダ内に配置する事で、参照関係が無くても必ずビルドデータに含まれるようにした
  • 作成した構造体に「IsValid()」というメンバ関数を定義する事で、構造体型の変数に対して Null チェックのような処理を行えるようにした
  • 各 3D モデルのメッシュやマテリアル、テクスチャ、ReflectionProbe、ライトマップ等のファイルをビルドデータに含めるのではなく、ゲーム中に Google Cloud Storage から動的にダウンロードしてシーンに配置する仕組みにした事で、アプリの起動時間を短くして理論上は容量制限に縛られる事なく 3D モデルを追加できるようにした
  • シーン自体をチャンク(CDN でデリバリされるデータ)に含めるのではなく、スクリプトと参照関係を持たないファイルのみをチャンクに含める事で、一部のスクリプトがチャンクに含まれてゲームが正常に動作しなくなる問題を防いだ
  • 「CharacterController.isGrounded」が false の時(プレイヤーが接地していない時)のみ重力を再現するという仕組みにした事で、プレイヤーが常にスムーズに移動できるようにした
  • Google Cloud Storage からダウンロードしたデータを保持しておく構造体に IDisposable を実装して「IDisposable.Dispose()」に適切な処理を記述する事で、メモリの開放を効率的に行えるようにした
  • ジャイロ機能を搭載する事で、ジョイスティックだけでは見る事の出来ない部屋の細部まで見られるようにした
  • ジャイロ機能が有効になっている間、ジャイロボタンを赤色に変化させる事で、ジャイロ機能が有効になっているかどうかをプレイヤーが視覚的に分かるようにした
  • 「ObserveEveryValueChanged()」を使用して画面のサイズを常に監視する事で、画面の向きが変わっても UI が崩れないようにした
  • RectTransform.GetWorldCorners()」を使用する事で、アンカーに関わらず UI の正確な絶対サイズを取得できるようにした
  • 指がボタンに触れている間はジョイスティックを反応させないようにする事で、誤操作による移動を防いだ
  • ライセンス表記のポップアップの縦幅をテキストの行数に応じて動的に調整できるようにする事で、端末によって画面の横幅が変わってもライセンス表記のポップアップからテキストがはみ出したり、余白が出来たりしないようにした
  • 現在の URL 内のクエリパラメーターを読み取る事で、QR コードや URL から直接、目的の 3D モデルの画面へ遷移できるようにした

お問い合わせ

    タイトルとURLをコピーしました