読者です 読者をやめる 読者になる 読者になる

コガネブログ

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

【Unity】指定されたオブジェクトの PrefabType を返す拡張メソッド

using UnityEditor; /// <summary> /// UnityEngine.Object 型の拡張メソッドを管理するクラス /// </summary> public static partial class UnityEngineObjectExt { /// <summary> /// 指定されたオブジェクトの PrefabType を返します /// </summary> public static PrefabType GetPrefabType( th…

【Unity】Unity5.4.4f1でAndroidのIL2CPP版のROMをビルドするとキャッシュが肥大化していく

Unity5.4.4f1でAndroidのIL2CPP版のROMをビルドしていたところ、 ビルドを繰り返すたびにLibraryフォルダ内の 下記のフォルダのサイズが少しずつ増えていく現象が発生し、 ビルドマシンの容量が圧迫される問題に遭遇した il2cpp_android_armeabi-v7a il2cpp_…

【Unity】iOS10の端末においてFPSが60の状態でスリープから復帰するとアプリが強制終了することがある

再現したUnityのバージョン Unity5.6.0b2 Unity5.5.0p3 Unity5.4.4f1 発生条件 iOS10の端末においてFPSが60の状態でスリープから復帰するとアプリが強制終了する 解決方法 サスペンドする時にFPSを30に変更する private int m_prevFps; private void OnAppli…

【NGUI】NGUIでマスクを使用する方法

UIPanel を配置する 「Clipping」を「Texture Mask」に設定する マスクに使用するテクスチャを設定する UIPanel の子供にマスクを適用したいオブジェクトを配置する

【Unity】Windows 7 における Unity エディタのログの保存場所

C:\Users\【ユーザー名】\AppData\Local\Unity\Editor

【Unity】Google Cardboard SDKを使用しているUnityプロジェクトのバージョンを5.5から5.6βにアップデートした際にAndroid版のROMで起動時に発生したエラー

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.hand.cham/com.google.unity.GoogleUnityActivity}: java.lang.ClassNotFoundException: Didn't find class "com.google.unity.GoogleUnityActivity" on path: DexPathList[[…

【Unity】NGUIのUISpriteのサイズが画像サイズと等しいかどうかを確認する拡張メソッド

using NwgLibrary; namespace Cham { /// <summary> /// UISprite 型の拡張メソッドを管理するクラス /// </summary> public static class UISpriteExt { /// <summary> /// スナップされている場合 true を返します /// </summary> public static bool IsSnapped( this UISprite self ) { var data…

【Unity】ログ出力を無効化する時に「logEnabledプロパティ」を使った場合と「Conditional属性」を使った場合の処理時間の検証

using UnityEngine; public class Example : MonoBehaviour { private void Awake() { var count = 1000000; { Debug.logger.logEnabled = false; var startTime = Time.realtimeSinceStartup; for ( int i = 0; i < count; i++ ) { Debug.Log( i ); } var e…

【Unity】Scene ビューから不要なオブジェクトを非表示にする

Unity エディタ右上の「Layers」を開いて 不要なオブジェクトを表示しているレイヤーを非表示にする 例えば、2Dの作業をしている時に3Dモデルを非表示にしておきたい時に役立ちます

【Unity】Unity5.5でスクリプトからAndroidのビルド方法をIL2CPPに変更する方法

下記のようなプログラムを作成する using UnityEditor; public static class ExampleClass { [MenuItem( "Tools/Example" )] public static void Example() { PlayerSettings.SetScriptingBackend( BuildTargetGroup.Android, ScriptingImplementation.IL2CP…

【Unity】UnityプロジェクトをUnity5.5にアップデートするとアセットバンドルの読み込み時にアプリがフリーズする原因と対応方法

原因 同一フレーム内で AssetBundle.LoadAssetAsync を複数回リクエストするとアプリがフリーズする 対応方法 AssetBundle.LoadAssetAsync を AssetBundle.LoadAsset に変更する もしくは、Unity 5.5.2 で直るらしいのでそれまで待つ 参考サイト様

【Unity】Unity5.5でAndroidのIL2CPPビルド版のアプリを実機で起動すると起動直後に強制終了する不具合の原因と対応方法

failed to extract resources needed by il2cpp. Unity5.5でAndroidのIL2CPPビルド版のアプリを実機で起動したところ、 起動直後に上記のエラーが発生してアプリが強制終了する不具合に遭遇した 原因 グラフィックAPIに「OpenGLES3」が追加されている 対応方…

【Unity】UnityプロジェクトをUnity5.5にアップデートするとスクリプトの先頭の#ifの記述が動作しなくなる?

#if !ENABLE_RELEASE #define DISABLE_RELEASE #endif public class Example { public void Log() { #if DISABLE_RELEASE UnityEngine.Debug.Log( "テスト" ); #endif } } 上記の様な、リリースビルド用の ENABLE_RELEASE シンボルが定義されていなければ 開…

【Unity】UnityプロジェクトをUnity5.5にアップデートしている時に「Too many heap sections」というエラーが発生する原因と対応方法

Too many heap sections UnityプロジェクトをUnity5.5にアップデートしている時に 上記のエラー文言が記載されたダイアログが何回か表示されることがあった 原因 Unity5.5にアップデートすると消える関数が存在する関係で それらの関数を使用している場合に…

【Unity】「Unity5.4.4p1」でゲーム実行中にシーン遷移を繰り返すとCPU使用率が100%まで上がっていく現象に遭遇

「Unity5.4.4p1」をインストールして、 エディタ上でゲームを実行していたところ、 シーン遷移を繰り返すとCPU使用率が100%まで上がっていき PCの動作がとても重たくなる現象に遭遇しました (Unityを終了するとCPU使用率が20%くらいまで戻る) 原因はわから…

【Unity】「Assertion failed on expression: '!(GetPersistentManager ().IsStreamLoaded (pathName) && !GetPersistentManager ().HasMemoryOrCachedSerializedFile (pathName))'」

Assertion failed on expression: '!(GetPersistentManager ().IsStreamLoaded (pathName) && !GetPersistentManager ().HasMemoryOrCachedSerializedFile (pathName))' Unityで下記のようなスクリプトを記述した所、上記のエラーが発生 using UnityEngine; …

【Unity】Androidのデフォルトのアクティビティ名

com.unity3d.player.UnityPlayerActivity

【おすすめスライド】「【Unity道場京都スペシャル】あんさんぶるスターズ!の開発方針」

【おすすめスライド】「Unity 5.4 & 5.5 新機能キャッチアップ講座」

【Unity】Unityプロジェクトを5.3から5.4にアップデートしたらアプリ開始時にエラーが発生するようになった場合の対応方法

エラー内容 MonoBehaviour を継承したクラスでコンストラクタを使用している箇所で 下記のエラーが発生する get_gameObject is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start ins…

【Unity】Unityプロジェクトを5.3から5.4にアップデートしたらNGUIのスクリプトでエラーが発生するようになった時の対応方法

エラー内容 NGUIMenu.cs でエラーが発生する Ignoring menu item NGUI because it is in no submenu! 対応方法 NGUIMenu.csの下記の記述を [MenuItem("NGUI/", false, 11)] static void Breaker () { } [MenuItem("NGUI/Help", false, 12)] static public vo…

【Unity】スクリプトからAndroidのビルド方法をIL2CPPに変更する方法

下記のようなプログラムを作成する using UnityEditor; public static class ExampleClass { [MenuItem( "Tools/Example" )] public static void Example() { PlayerSettings.SetPropertyInt( name : "ScriptingBackend", value : ( int )ScriptingImplement…

【Unity】MacでUnityのメニューのPreferencesからAndroid NDKを落とした場合に解凍する方法

AndroidのIL2CPPビルド環境構築時に調べたのでメモ ターミナルから実行権限を付与する chmod +x android-ndk-r10e-darwin-x86_64.bin ターミナルから実行する ./android-ndk-r10e-darwin-x86_64.bin 下記のフォルダが展開される android-ndk-r10e 参考サイト…

【Unity】「DontDestroyOnLoad only work for root GameObjects or components on root GameObjects.」

子オブジェクトに対して DontDestroyOnLoad 関数を使用すると表示される警告 DontDestroyOnLoad 関数はルートのオブジェクトにのみ使用可能

【Unity】AnimatorでTime.timeScaleを無視する方法

updateMode プロパティを使用する // タイムスケールを考慮する animator.updateMode = AnimatorUpdateMode.Normal; // タイムスケールを無視する animator.updateMode = AnimatorUpdateMode.UnscaledTime; 参考サイト様

【Unity】DOTweenでTime.timeScaleを無視する方法

SetUpdate 関数を使用する DOTween .To( value => { }, 0, 1, 1 ) .SetUpdate( true ) ; 参考サイト様

【Unity】Time.timeScaleを無視したdeltaTimeを取得する方法

Time.unscaledDeltaTime を使用する Debug.Log( Time.unscaledDeltaTime ); 参考サイト様

【Unity】【NGUI】UICenterOnChildのInspectorに整列用のボタンを追加するエディタ拡張

using UnityEditor; using UnityEngine; [CanEditMultipleObjects] [CustomEditor( typeof( UICenterOnChild ), true )] public sealed class UICenterOnChildEditor : Editor { public override void OnInspectorGUI() { DrawDefaultInspector(); if ( GUIL…

【Unity】【NGUI】UIWrapContentのInspectorにソート用のボタンを追加するエディタ拡張

using UnityEditor; using UnityEngine; [CanEditMultipleObjects] [CustomEditor( typeof( UIWrapContent ), true )] public sealed class UIWrapContentEditorCustom : UIWrapContentEditor { public override void OnInspectorGUI() { base.OnInspectorGU…

【Unity】【NGUI】UIScrollViewのInspectorにリセット用のボタンを追加するエディタ拡張

using UnityEditor; using UnityEngine; [CanEditMultipleObjects] [CustomEditor( typeof( UIScrollView ), true )] public sealed class UIScrollViewEditorCustom : UIScrollViewEditor { public override void OnInspectorGUI() { base.OnInspectorGUI()…

【Unity】【NGUI】UIGridのInspectorに整列用のボタンを追加するエディタ拡張

using UnityEditor; using UnityEngine; [CanEditMultipleObjects] [CustomEditor( typeof( UIGrid ), true )] public sealed class UIGridEditorCustom : UIGridEditor { public override void OnInspectorGUI() { base.OnInspectorGUI(); if ( GUILayout.B…

【Unity】「Easy Touch」でNGUIのオブジェクトを2本指で操作された時に、イベントを呼び出されないようにする方法

バージョン 5.0.11 対応方法 EasyTouch.csの934行目以降に下記の処理を追加する // NGUI if (enabledNGuiMode){ if (IsTouchOverNGui(fingers[twoFinger.finger0].position) && IsTouchOverNGui(fingers[twoFinger.finger1].position)) { twoFinger.isOverGu…

【Unity】UniRxを使用して条件を満たしたらActionデリゲートを呼び出す汎用関数を実装する

val isCompleted = false; CoroutineUtils.CallWaitForCondition( () => isCompleted, () => Debug.Log( "ピカチュウ" ) ); CoroutineUtils.CallWaitForCondition( gameObject, () => isCompleted, () => Debug.Log( "ピカチュウ" ) );

【Unity】UniRxを使用して指定された秒数待機してからActionデリゲートを呼び出す汎用関数を実装する

CoroutineUtils.CallWaitForSeconds( 1.5f, () => Debug.Log( "ピカチュウ" ) ); CoroutineUtils.CallWaitForSeconds( gameObject, 1.5f, () => Debug.Log( "ピカチュウ" ) );

【Unity】UniRxを使用して1フレーム待機してからActionデリゲートを呼び出す汎用関数を実装する

CoroutineUtils.CallWaitForEndOfFrame( () => Debug.Log( "ピカチュウ" ) ); CoroutineUtils.CallWaitForEndOfFrame( gameObject, () => Debug.Log( "ピカチュウ" ) );

【Unity】AndroidやiOSのシェアを確認できるサイト

Unity - Mobile Hardware Stats

【Unity】ボックス化をなるべく回避してGCの発生回数を減らすstring.Format

// string.Format を使用した場合のGC発生回数検証 for ( int i = 0; i < 1000000; i++ ) { string.Format( "{0},{1},{2},{3}", 0, 1, 2, 3 ); } Console.WriteLine( GC.CollectionCount( 0 ) ); // StringUtils.Format を使用した場合のGC発生回数検証 for …

【Unity】「Error building Player: IOException: Failed to Copy File / Directory from 'Temp/StagingArea/Data' to 'Temp/StagingArea/Trampoline/Data'.」

Error building Player: IOException: Failed to Copy File / Directory from 'Temp/StagingArea/Data' to 'Temp/StagingArea/Trampoline/Data'. JenkinsでUnityのビルド実行時に発生したエラー Jenkins用のMacの容量が不足していたことが原因

【Unity】NGUI「EVENT SYSTEM」翻訳

Colliderがアタッチされているすべてのゲームオブジェクトは イベントを受け取ることが可能 using UnityEngine; public class Example : MonoBehaviour { private void OnHover( bool isOver ) { Debug.Log( "OnHover" ); } private void OnPress( bool isPr…

【Unity】NGUI「CONTEXT MENUS」翻訳

便利なメニュー ショートカットキーで実行 ショートカットキー 内容 Alt+Shift+N 選択中のオブジェクトの子に空のオブジェクトを作成 Alt+Shift+C 選択中のオブジェクトにBoxColliderをアタッチ Alt+Shift+P 選択中のオブジェクトのサイズをスナップ Unityの…

【Unity】NGUI「THE BASICS」翻訳

UIの作り方 1. プレハブをProjectビューからSceneビューにドラッグする 2. Unityのメニューから作成する 3. ショートカットキーを使用する ショートカットキー 内容 Alt+Shift+S UISprite作成 Alt+Shift+L UILabel作成 Alt+Shift+T UITexture作成 Alt+Shift+…

Unity5.4で気になった改善点と変更点メモ

AndroidでIL2CPPが正式サポート iOS6がサポート対象外に スプラッシュスクリーンに細かい設定が追加された GameObject.AddComponent<MonoBehaviour>が例外を吐くようになった 実機でログ出力するかどうかをPlaterSettingsで設定できるようになった アニメーションで同じイベ</monobehaviour>…

【おすすめAsset Store Publisher】「SURIYUN」

http://www.suriyun.com/ Anime Character SD Character Refined Airplane Control Low-Poly Pack Knight & Orc

【おすすめAsset Store Publisher】「Wizcorp」

Anime Character

【おすすめAsset Store Publisher】「BITGEM」

3Dモデル/建物 3Dモデル/キャラクター テクスチャ

【おすすめAsset Store Publisher】「Flipbook Games」

http://flipbookgames.com/

【Unity】サンプルや完成プロジェクト、ツールがダウンロードできるページ

https://unity3d.com/jp/learn/resources/downloads

【Visual Studio】括弧に色を付ける拡張機能「Viasfora」

「Viasfora」をVisual Studioに追加することで 括弧に色を付けることができます 適用前 適用後

【Unity】ゲームオブジェクトにコメントを付与することができるアセット「GameObject Comments」

概要 「GameObject Comments」を使用すると ゲームオブジェクトにコメントを付与することができます

【Unity】Slack APIを使用してSlackにスクリーンショットをアップロードするクラス

使用例 var filename = DateTime.Now.ToString( "yyyy-MM-dd_hhmmss" ) + ".png"; var data = new UploadData { token = "【Slack API Token】", filename = filename, title = "タイトル", initial_comment = "コメント", channels = "#general", }; var ro…