コガネブログ

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

2014-04-01から1ヶ月間の記事一覧

【Unity】The associated script can not be loaded. Please fix any compile errors and assign a valid script.

今日、Unityでゲームを開発していたら、上記のような警告が表示されて アタッチしているコンポーネントが動かない (AwakeやStart、Update関数が呼び出されない)不具合に遭遇しました 調べてみたところ、 名前空間の中にMonoBehaviourを継承したクラスの定…

【Unity】EditorGUILayout.ObjectFieldの型指定の重複を無くすラッパー関数

概要 mTexture = EditorGUILayout.ObjectField(label, mTexture, typeof(Texture), false) as Texture; mMaterial = EditorGUILayout.ObjectField(label, mMaterial, typeof(Material), false) as Material; Unityのエディタ拡張でEditorGUILayout.ObjectFie…

【Unity】Request error (error): UnityEditor.AsyncHTTPClient:Done(State, Int32)

はじめに Request error (error): UnityEditor.AsyncHTTPClient:Done(State, Int32) 最近、Unityエディタ上で 上記のようなエラーが出るようになったので原因を調べてみました このエラーは下記の手順で直すことができます 直し方 Unityエディタのメニューの…

【C#】数値を3桁カンマ区切りの文字列に変換する拡張メソッド

ソースコード /// <summary> /// object 型の拡張メソッドを管理するクラス /// </summary> public static partial class ObjectExtensions { /// <summary> /// 渡された数値を3桁カンマ区切りの文字列に変換して返します /// </summary> public static string WithComma(this object self) { retu…

【C#】1つの文字列が複数の文字列のいずれかと等しいか判定する拡張メソッド

#概要 if (name == "チコリータ" || name == "ヒノアラシ" || name == "ワニノコ") { // ... } 1つの文字列を複数の文字列と比較して いずれかの文字列と等しかった場合は処理を行うといったことをやるときに 上記の書き方は冗長なので using System.Linq; …

【Unity】リスト内の要素をランダムに返す拡張メソッド

ソースコード /// <summary> /// IList 型の拡張メソッドを管理するクラス /// </summary> public static partial class IListExtensions { /// <summary> /// ランダムにリスト内の要素を返します /// </summary> /// <typeparam name="T">リスト要素の型</typeparam> /// <param name="self">リスト</param> /// <returns>リスト内の要素</returns> public static T GetRandom<T>(t…</t>

【Unity】配列内の要素をランダムに返す拡張メソッド

ソースコード /// <summary> /// 配列の拡張メソッドを管理するクラス /// </summary> public static class ArrayExtensions { /// <summary> /// ランダムに配列内の要素を返します /// </summary> /// <typeparam name="T">配列要素の型</typeparam> /// <param name="array">配列</param> /// <returns>配列内の要素</returns> public static T GetRandom<T>(this T[] self) { …</t>

【Unity】エディタ再生中にゲームオブジェクトをコピーできる

あまり知られていない機能ですが Unityエディタを再生中にHierarchyのオブジェクトをコピーして 再生を停止してからHierarchyに貼り付けることができます こうすることで、エディタ再生中のオブジェクトの位置情報や アタッチされているコンポーネントの情報…

【Unity】子のオブジェクトが存在するかどうかを確認する拡張メソッド

ソースコード /// <summary> /// GameObject 型の拡張メソッドを管理するクラス /// </summary> public static partial class GameObjectExtensions { public static bool HasChild(this GameObject gameObject) { return 0 < gameObject.transform.childCount; } } /// <summary> /// Tr</summary>…

【C#】数値を0埋めの文字列に変換する拡張メソッドの実装

はじめに int num = 1234; Debug.Log(num.ToString("D8")); // 00001234 数値を0埋めの文字列に変換する場合は上記のような構文を使用すると実現できますが ゲームを開発していると、数値を0埋めの文字列に変換する機会が意外と多いので 僕は下記のような拡…

【C#】Rubyライクなループ処理を拡張メソッドで実現する

はじめに for (int i = 0; i < MAX; i++) { Debug.Log(i); } 上記のような単純なループ処理はよく記述しますが ループ変数の宣言や終了条件の記述、ループ変数のインクリメントなど 処理内容の単純さに比べると構文は冗長です なので、下記のような拡張メソ…

【参考書籍】2013年度に購入した参考書籍まとめ

Unity関連 ゲームの作り方 Unityで覚える遊びのアルゴリズム作者:加藤 政樹SBクリエイティブAmazon Unity 4ライブラリ辞典 エディタ編作者:安藤 圭吾カットシステムAmazon Unity実践技術大全 (GAME DEVELOPER BOOKS)作者:菊田 剛,桑原 公一郎,只野 顕二秀和…

【C#】Func デリゲートの null チェックを省略するための拡張メソッド

概要 Actionデリゲートのnullチェックを省略するための拡張メソッドを作ったついでに Funcデリゲートに関しても同様のものを作成しました まだ使ったことはないですがきっと役に立つはず・・・ Func<bool> func = null; func.Call(); // OK func(); // NULL例外発生</bool>…

【Unity】ExecutionEngineException: Attempting to JIT compile method

ExecutionEngineException: Attempting to JIT compile method Unityで開発したiOS版のアプリを動作確認していた時にこの例外に遭遇しました C#のLINQ to Objectsの下記の関数を使用していたのが原因だったようです Enumerable.Cast Enumerable.Contains Enu…

【C#】Action デリゲートの null チェックを省略するための拡張メソッド

はじめに private Texture LoadTexture(Action<Texture> onLoaded = null) { // ... if (onLoaded != null) { onLoaded(texture); } } 例えばテクスチャを読み込む関数があって 読み込んだテクスチャを戻り値だけでなくコールバック関数でも渡せるようにしたとすると </texture>…

【Unity】「Unite Japan 2014」2日目参加してきました

Unite Japan 2014 http://japan.unity3d.com/unite/unite2014/ 参加したセッション 自分だけの Unity GUI を作ってみよう Unity と Web デプロイメントの未来 Unity2D のよくある問題とその解決方法 オーディオ新機能ツアー 2014 Unity Test Tools Editor 拡…

【Unity】「Unite Japan 2014」1日目参加してきました

Unite Japan 2014 http://japan.unity3d.com/unite/unite2014/ 参加したセッション コンセプト⇔ゲームデザイン どう合わせる? Unity 5.0 アセットパイプライン/アセットバンドル モバイルゲームを口コミで急速に普及させるには Unity × KLab × OPTPiX Sprit…

【C#】周回数が取得できるforeach文を拡張メソッドで実現する

概要 var texts = new[] { "ピカチュウ", "カイリュー", "ヤドラン" }; foreach (var n in texts.Select((val, index) => new { val, index })) { Debug.Log(n.index + ":" + n.val); } foreach文を使用する場合、LINQのSelect関数を使うと周回数が簡単にわ…

【C#】開始値の指定を省略できるEnumerable.Rangeのラッパー関数を作る

C#

概要 for (int i = 0; i < MAX; i++) { // ... } 上記のようなfor文は終了条件を間違えて書いてしまったり ループ変数の扱いをミスしてしまうことが少なからずあるので このような処理を行うときはLINQのEnumerable.Range関数を使用しています foreach (int …

【C#】ListのAddRangeを拡張する

概要 list.AddRange(1, 2, 3); // エラー List型のインスタンスに値を追加するときに 上記のような書き方ができると楽だなと思って下記のような拡張メソッドを作りました /// <summary> /// 指定したコレクションの要素を List の末尾に追加します /// </summary> /// <typeparam name="T">List の型</typeparam>…

【Unity】Enum.TryParseを使用できるようにする

概要 .NET Framework 4以降であれば、列挙型でもTryParse関数を使用することができますが Unityは.NET Framework 3.5までの機能しか使用できないので 列挙型でTryParse関数を使いたい場合は下記のように自分で実装する必要があります // ジョブの種類 privat…