コガネブログ

平日更新を目標にUnityやC#、Visual Studioなどのゲーム開発アレコレを書いていきます

【Unity】uGUI で Canvas Renderer の「Cull Transparent Mesh」をオンにすると透明なオブジェクトの描画をスキップできる

概要 例えば uGUI で透明な Image をシーンに配置した場合 画面には何も表示されないですが Overdraw を見てみると、うっすら赤くなっており 描画の処理は走ってしまっていることがわかります (透明な Image を10個重ねてみるとこのようにわかりやすくなり…

【Unity】ゲームオブジェクトにアタッチされているすべての MonoBehaviour の情報を JSON で出力する方法

概要 using System.Linq; using UnityEngine; public class Example : MonoBehaviour { private void Start() { var list = GetComponents<MonoBehaviour>() .Select( c => JsonUtility.ToJson( c, true ) ) ; var str = string.Join( "\n", list ); Debug.Log( str ); } } </monobehaviour>…

【Unity】すべての子オブジェクトを親オブジェクトから切り離す「Transform.DetachChildren」

概要 using UnityEngine; public class Example : MonoBehaviour { private void Start() { transform.DetachChildren(); } } 「Transform.DetachChildren」を使用することで すべての子オブジェクトを 親オブジェクトから切り離すことができます 孫オブジェ…

【Unity】新規プロジェクトを作成する時に選択できるテンプレートを自作する方法

はじめに Unity で新規プロジェクトを作成する時に選択できるテンプレートは自作できます 検証環境 Windows 10 Unity 2018.3.7f1 Unity Hub 1.6.0 作成方法 【Unity のインストール先】\Editor\Data\Resources\PackageManager\ProjectTemplates 上記のフォル…

【Unity】iOS で加速度センサを無効化してパフォーマンスを改善する

概要 iOS で加速度センサを使用しない場合、 Unity メニューの「File > Build Settings...」から 「Player Settings...」を開いて、iOS の Other Settings の中に存在する 「Accelerometer Frequency」を「Disabled」にすることで 少しだけパフォーマンスを…

【Unity】Unity 製の APK をバッチファイルで起動する方法

概要 adb shell am start -n "【パッケージ名】/com.unity3d.player.UnityPlayerActivity" 上記のようなコードが記述されたバッチファイルを実行する 参考サイト様

【Unity】Rigidbody2D を使用した際のすり抜けを防ぐ方法

概要 Unity メニューの「Edit > Project Settings > Time」を開いて 「Fixed Timestep」の数値を減らす 減らしすぎるとゲームが処理落ちする可能性があるので注意 参考サイト様

【Unity】乱数のシード値をランダムに設定する

概要 Random.InitState( System.DateTime.Now.Millisecond ); 例えば現在の日時をシード値に設定することで 乱数のシード値を擬似的にランダムに設定できる

【Unity】Console ウィンドウに表示される「warning CS0649: Field is never assigned to」の警告を無効化する方法

概要 using UnityEngine; public class Example : MonoBehaviour { [SerializeField] private GameObject m_gameObject; private void Awake() { Debug.Log( m_gameObject ); } } このようなコードを記述した場合 Assets\Example.cs(5,38): warning CS0649: …

【Unity】Visual Studio で表示される「warning CS0649: Field is never assigned to」の警告を一括で無効化してしまうエディタ拡張

概要 using UnityEngine; public class Example : MonoBehaviour { [SerializeField] private int m_value; private void Start() { Debug.Log( m_value ); } } このようなコードを記述した場合 CS0649 フィールド 'Example.m_value' は割り当てられません。…

【Unity】iOS / Android でバッテリーの状態を確認できる「SystemInfo.batteryLevel」「SystemInfo.batteryStatus」

概要 // バッテリーの残量 ( 0.0 - 1.0 ) var level = SystemInfo.batteryLevel; // バッテリーの状態 // // Charging : 充電中 // Discharging : 放電中 // NotCharging : 充電していない // Full : 満タン var status = SystemInfo.batteryStatus; Windows…

【Unity】デフォルトの AndroidManifest.xml が保存されている場所

概要 【Unity のインストール先】\Editor\Data\PlaybackEngines\AndroidPlayer\Apk 上記のフォルダにデフォルトの AndroidManifest.xml が保存されています

【Unity】マテリアルで設定する時のシェーダの場所名を取得する方法

概要 シェーダファイルのこの部分をスクリプトから参照したい場合 public Shader m_shader; ... var name = m_shader.name; name プロパティにアクセスすれば取得できる

【Unity】Unity 2018.3 から自動実装プロパティに SerializeField 属性を付与して Inspector に表示できるようになった

概要 公式で意図されたものかどうかはわからないですが using UnityEngine; public class Example : MonoBehaviour { [field: SerializeField] public int Health { get; private set; } } このように自動実装プロパティに SerializeField 属性を付与すると …

【Unity】シェーダファイルの Inspector に表示されるエラー文言は右クリックしてコピーできる

概要 シェーダファイルの Inspector に表示されるエラー文言は 右クリックして「Copy error text」を選択することでコピーできる

【Unity】Console ウィンドウのログを選択した状態で Ctrl + C を押すとコピーできる

概要 Console ウィンドウのログを選択した状態で Ctrl + C を押すと スタックトレースも含めてログをコピーできます 参考ツイート Wow, didn't know that you can Ctrl+C on a console entry and copy the whole text from the output, so you can paste it …

【Unity】Windows PC で Mac 向けのスタンドアロンビルドができるようにする方法

概要 Windows PC で Mac 向けのスタンドアロンビルドを行おうと Build Settings の「Target Platform」を表示した際に、 「Windows」の項目しか存在しない場合は、 Unity Hub の「Installs」タブから任意のバージョンの Unity のメニューを開いて 「Add Comp…

【Unity】AnimationCurve の初期化ができる「AnimationCurve.Constant」「AnimationCurve.Linear」「AnimationCurve.EaseInOut」

概要 using UnityEngine; public class Example : MonoBehaviour { public AnimationCurve m_curve1 = AnimationCurve.Constant( 0, 1, 0.5f ); public AnimationCurve m_curve2 = AnimationCurve.Linear( 0, 0, 1, 1 ); public AnimationCurve m_curve3 = A…

【Unity】Unity 製の PC ゲームにおける逆コンパイル・改造の方法と難読化による対策を紹介

はじめに この記事は「Unity #2 Advent Calendar 2018」の 12/6 の記事です Unity で作成したゲームは特に何も対策しなかった場合、 割と簡単にソースコードを閲覧したり改造したりすることができます この記事では Unity 製のゲームはどのように逆コンパイ…

【Unity】Visual Studio で Unity イベントの関数名の表示色を変更する方法

概要 Visual Studio メニューの「ツール>オプション」から 「環境>フォントおよび色」を選択し 「Unity メッセージ」の「前景色」を変更して「OK」を押すことで Unity イベントの関数名の表示色を変更できます 参考ツイート Did you know you can customize …

【Unity】Visual Studio だとデバッガーで LINQ の結果を確認できない?が VSCode だと確認できる

概要 Console アプリケーションの場合 結果ビューを展開すると LINQ の結果を確認できる Unity + Visual Studio の場合 結果ビューの展開ができず LINQ の結果を確認できない Unity + VSCode の場合 IEnumerator を展開すると LINQ の結果を確認できる Unity…

【Unity】Windows でスタンドアロンビルドしたゲームにおける PlayerPrefs の保存場所

保存場所 レジストリの下記の場所に保存されている HKEY_CURRENT_USER\Software\【Company Name】\【Product Name】 確認方法 Windows のスタートメニューに「regedit」と入力する 「regedit.exe」を起動する HKEY_CURRENT_USER\Software\【Company Name】\…

【Unity】公式のドキュメントにコメントを記載できるようになる非公式の Google Chrome 拡張機能「User Contributed Notes for Unity Docs」紹介

はじめに 「User Contributed Notes for Unity Docs」を Google Chrome に追加することで 公式のドキュメントにコメントを記載できるようになります 使用例 適用前 適用後 ページ下部にコメント欄が追加されていることが確認できます 参考サイト様 https://f…

【Unity】アルファ版、ベータ版のリリース情報を RSS で受け取る

概要 https://unity3d.com/jp/unity/beta/latest.xml 上記の XML を RSS リーダに登録することで アルファ版、ベータ版のリリース情報を RSS で受け取ることができます

【Unity】プロジェクトの Unity バージョンを上げる時の注意点がまとめられた公式ドキュメント

概要 https://docs.unity3d.com/Manual/UpgradeGuides.html 上記のページで、プロジェクトの Unity バージョンを上げる時の 注意点がまとめられています

【Unity】Scene ビュー右上の鍵アイコンを ON にすると Scene ビューの回転操作を無効化できる

概要 Scene ビュー右上の鍵アイコンを ON にすると Scene ビューの回転操作を無効化できます

【Unity】Windows で Standalone ビルドしたゲームに含まれているシーンを確認する方法

概要 ビルドした .exe と同じ場所にある「XXXX_Data」フォルダ内の 「globalgamemanagers」をテキストエディタで開き、 シーンファイル名を検索すると、ビルドに含まれているシーンを確認できます

【おすすめスライド】「良くわかるMeta」

スライド 参考サイト様 https://developer.aiming-inc.com/study/unity-meta-study/

【Unity】yield return 0 を使用すると 20B の GC Alloc が発生する

概要 using System.Collections; using UnityEngine; public class Example : MonoBehaviour { private IEnumerator Start() { while ( true ) { yield return 0; } } } yield return null なら GC Alloc は発生しない 検証環境 Unity 2017.4.7f1

【Unity】UnityEngine.Object.name にアクセスすると 46B の GC Alloc が発生する

概要 using UnityEngine; public class Example : MonoBehaviour { private void Update() { var name = gameObject.name; } } 検証環境 Unity 2017.4.7f1