ルルのゲーム開発備忘録

主にUnityやC#に関する情報を気まぐれに投稿していきま~す

C#

【C#】ValueTuple(タプル)の使い方

ValueTuple(タプル) タプルが一番威力を発揮するケース タプルの比較 タプルの分解 参考 ValueTuple(タプル) C#7.0からValueTuple(タプル)が追加されました。 タプルは、複数の要素をグループ化したデータです。タプルの生成方法と各要素のアクセス方法の例…

【Unity】Unityのnullだけどnullじゃない問題

はじめに nullだけどnullじゃないんです 原因の正体 対応策 参考 はじめに 前回の記事*1で?.演算子と??=演算子の紹介をしました。これらを使うときにUnityのnull判定について少し注意が必要になるので、今回はそれについて紹介します。UnityのComponetnクラ…

【C#】Unityで使えるnullの判定を楽にする演算子

はじめに ?.演算子 ??=演算子 最後に はじめに C#6.0から利用可能になっている?.演算子と、C#8.0から利用可能になっている??=演算子についての紹介です。 (Unityのクラスに対して使うのは少しだけ注意が必要です、それについては次の記事で説明予定) ?.演算…

【C#】演算子(operator)のオーバーロード

はじめに 演算子のオーバーロードとは 書き方 サンプル オーバーロードできる演算子例 最後に はじめに C#の演算子(operator)のオーバーロードについての紹介です。 演算子のオーバーロードとは 自分で定義した型に対して演算を定義することができます。例え…

【Unity】UnityのエディタをVSCodeに設定する手順(Macの場合)

はじめに 1 VSCode向け.NetSDKをインストール 2 VSCodeをインストールする 3 VSCode拡張機能をインストール 3-1 検索欄に「C#」と入力し、C#機能拡張をインストール 3-2 検索欄に「Unity」と入力し、UnityCodeSnippetsをインストール 4 Omnisharp: Use Moder…

【Unity】シーンの一覧を表示して開くEditor拡張

はじめに エディタ拡張のプログラム エディタの見た目 まとめ はじめに ゲームを実行するときに、最初のシーンをいちいちProjectウィンドウから検索して開くのが面倒くさかったので、シーン一覧を表示してその中から選ぶとシーンを開いてくれるエディタ拡張…

【Unity】SingletonMonobehaviourとは?目的や使い方について解説

はじめに SingletonMonobehaviourの特徴 SingletonMonobehaviourの実装 まとめ はじめに Unityにおいて、マネージャークラスなど、シーン内で唯一のインスタンスを保持する必要があるクラスを扱う場合があります。例えば、GameManagerやSoundManagerなどがこ…

【Unity】ジェネリックとは?目的や使い方について解説

はじめに ジェネリックの基本 Unityでのジェネリックの利点 型に依存しないコード まとめ はじめに Unityでは、ジェネリックを使って、型に依存しないコードを実現することができます。 ジェネリックの基本 ジェネリックは、C#の機能で、汎用的なプログラム…

【Unity】RequireComponentとは?目的や使い方について解説

はじめに RequireComponentの目的 使い方 まとめ はじめに Unityには、Componentを簡単に追加するための機能がいくつかあります。その中でも、RequireComponentと呼ばれる機能は、Componentを追加する時に付属的に必要なComponentを自動的に追加するための機…

【Unity】ラムダ式で最近知った書き方

はじめに void 関数 => ステートメント まとめ はじめに Unity関連のことを調べてた時にふと見つけたラムダ式?の意外な書き方があったのでそのメモです。 void 関数 => ステートメント 例えば↓のような感じで、void Start() => count++と書くと、Start()が…

【Unity】実行するまでが劇的に速くなるEnterPlayModeオプションについて

はじめに Unity Japanの公式動画での紹介 EnterPlayModeの要点 UnityのPlayModeが実行されるまでの時間がはやくなる オプションの設定方法 なぜ速くなるか ドメイン・リローディング シーン・リローディング EnterPlayModeをオンにした時の副作用 その他 ま…

【Unity】#regionを使ったコードの整理

はじめに #region~#endregionで囲う regionをたたむこともできる まとめ はじめに 今回は#regionの使い方についての紹介です。 #region~#endregionで囲う ↓の画像のように、自分のコードの好きな部分を#region~#endregionで囲うことができます。囲うこと…

【Unity】関数を数秒後に遅らせて実行する処理を簡単に書く方法 [Invoke]

はじめに Invoke サンプルコード 実行結果 まとめ はじめに ゲームを作っていると、数秒遅らせて処理したいという場面にしばしば出くわすと思います。自分はよくコルーチンを使うのですが、この前、Invokeで実装する方法を知ったので紹介します。 Invoke Inv…

【Unity】UnityEditorで再生してないのにコンストラクタ内の処理が実行される

はじめに シリアライズ化されるタイミングでコンストラクタが実行される EditorApplication.isPlayingで防ごうとしたらどうなるか まとめ はじめに この前、Unityでゲーム開発してるときにシーンやプレハブを開いただけでコンストラクタ内のDebug.Logが処理…

【C#】returnはvoidの関数でも使える(過去記事再編集)

戻り値のないreturn サンプル まとめ 戻り値のないreturn return文って聞くと、戻り値の関数内で使うイメージがありますが、戻り値のないvoid関数内でも使うことができます。 使うとreturn文以下は処理されなくなります。「早期return」とよばれるやつですね…

【C#】ChatGPTに「C#でじゃんけんのプログラムかいて」ってお願いしてみた!

C#

ChatGPTにお願いだ! 使ったツール AIチャットくんとのやり取りの様子 生成してくれたC#のじゃんけんコード 生成されたコードの動作確認 まとめ ChatGPTにお願いだ! 最近何かと話題のChatGPT*1*2をつかって、C#でじゃんけんのプログラムを書かせてみました…

【Unity】ビルドにコードの一部を含めない方法

defineディレクティブ defineディレクティブ デバッグツールやログ出力などを実機やリリースビルドに含めたくないときには #if UNITY_EDITOR Debug.LogError("エラー"); #endif のように#defineディレクティブで囲むと簡単にできます。また、自分でカスタム#…

【Unity】SerializeFieldの隣の「ToolTip」について

「ToolTip」とは サンプル インスペクター上の見え方 まとめ 「ToolTip」とは Unityでチーム開発とかをしてると[SerializeField]の部分が [Tooltip("タイトル用のテキスト"), SerializeField]のようになっているのをよく見かけると思います。これはTooltipAt…

【Unity】実行中のコマ送り機能のショートカットキーと隠れ?機能

Unityのコマ送り機能 GUIでの通常のコマ送り ショートカットキーを使ったコマ送り コマ送りしながらさらにボタンをタップする まとめ Unityのコマ送り機能 Unityにコマ送り(1フレームずつ実行させる、描画させる)機能があるのはご存知の方も多いと思います。…

【Unity】コルーチンを使うときに、メモリ割り当てを少し減らす方法・最適化

WaitUntilやWaitWhileはインスタンスを作成する コーディングの例 WaitUntilやWaitWhileはインスタンスを作成する コルーチン内のyield returnでnew WaitUntileやWaitWhileは、新しいインスタンスを作成してメモリアロケーションが発生するので、何回もコル…

【Unity】入門:コルーチンまとめ

コルーチンとは コルーチンの使い方 コルーチンの宣言 コルーチンの実行 よく使うコルーチンの処理 yield return null yield return new WaitForSeconds(n) yield return new WaitUntil(() =>bool値) yield return new WaitWhile(() => bool値) yield break …

【C#】Listの中身をランダムに入れ替える・ランダムに一個取り出す簡単な書き方

たった1行でランダムにできる方法 結論 出力結果 やっていること 補足 たった1行でランダムにできる方法 LinqとGuidをつかって、リストの中身をランダムにする方法、ランダムに一個取り出す方法を紹介します。といってもランダムに一個取り出すほうは、中身…

【Unity】Debug.Logの第二引数が便利

Debug.Log()の第二引数にObject型を指定して、実行して出てきたコンソールログをクリックすると指定したObjectがヒエラルキーのどこにいるかを教えてくれます。 最近まで知りませんでした...

【Unity】関数名やプロパティ名はわかるけど、どのusingを使えばいいかわからないよ~って時に使うショートカット

結論 windowsでVisual Studioの環境なら「Alt + Enter」で該当しそうなusingディレクティブを示してくれる。(macは調べてないからわからないけど「cmd + Enter」とかかな?) 内容 時々関数名やプロパティ名はわかるけど、どのusingディレクティブを追加すれ…

【Unity】フレームレートを変更する方法

以下の1行で、好きなフレームレート数に設定できます。 // 30フレームに設定 Application.targetFrameRate = 30; あくまで目標とするフレームレート数なので、処理が間に合わない場合は それ以下のフレームレートになります。 1フレームの処理が終わった場合…

【Unity】定数用のクラスを定義

どこのスクリプトからでも参照したい定数をまとめておくクラスの作成例の一つです。 public static class GrobalConst { public static class PlayerSetting { public static int INIT_PLAYER_NUM = 3; public static int MAX_PLAYER_NUM = 16; public stati…

文字列の中にある文字列が含まれているかどうかの判定

C#

たとえば"あいうえお"の中に"あい"が含まれているかどうかを調べるときはIndexOfを使うとできます。 var str1 = "あいうえお"; var str2 = "あい"; Debug.Log(str1.IndexOf(str2)); 出力:1 str2が"いう"の場合は2が返ってきます。 逆に含まれていない文字…

tips:return文はvoidの関数でも使える

通常return文は、戻り値がある関数で使うが、 voidの関数内でも使うことができる。 処理を早めに返したい時などに使えるし、コードが読みやすくなることもある。

tips:個人的に一番使うUnityショートカット

Shift + F12 個人的には、間違いなくこれを叩いてる回数が一番多い Visual Studioで変数名や関数名を選んで上記ショートカットを叩くと 参照元・参照先が全部わかりすぐにそこにとべる。(飛んだ後に戻るにはctrl + -) (Windowsでのショートカット macはわか…

tips:引数にoutキーワードをつけたメソッドは可能な限り定義しない

outキーワードを使っているメソッドは良いメソッドとは言えない場合がほとんど。 特に引数が一つでそれにoutキーワードがついているメソッドは、明らかに設計ミスである。 呼び出しもとに結果を返すなら戻り値として返すべき。 **<span style="color: #000000">唯一outキーワードが許され</span>…