コガネブログ

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

【Unity】シーンファイルのInspectorを拡張する

Unity 5以降であれば、シーンファイルのInspectorを拡張可能です

例えば、上記のスクリプトをUnityプロジェクトの
「Editor」フォルダに追加することで、シーンファイルのInspectorを
下記のように拡張することが可能です

f:id:baba_s:20150405232949p:plain

このサンプルではInspector上からシーンファイルを
「Build Settings>Scenes In Build」に
追加したり削除したりできるようにしてみています

【Unity】TransformのTranslate関数の拡張メソッド

ソースコード

using UnityEngine;

public static class TransformExtensions
{
    /// <summary>
    /// X 軸方向に移動します
    /// </summary>
    public static void TranslateX( this Transform self, float x )
    {
        self.Translate( x, 0, 0 );
    }
    
    /// <summary>
    /// Y 軸方向に移動します
    /// </summary>
    public static void TranslateY( this Transform self, float y )
    {
        self.Translate( 0, y, 0 );
    }
    
    /// <summary>
    /// Z 軸方向に移動します
    /// </summary>
    public static void TranslateZ( this Transform self, float z )
    {
        self.Translate( 0, 0, z );
    }
}

使い方

transform.TranslateX( 25 );
transform.TranslateY( 25 );
transform.TranslateZ( 25 );

関連記事

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

Unity

C#

Cocos2d-x

C++

Lua

プログラミング

チーム開発

【Unity】uLua 検証中に遭遇したエラー

Asset Store

現象

  1. uLuaを購入してUnityプロジェクトにインポート
  2. 「01_HelloWorld.unity」を開いて実行
  3. 下記のエラーが発生
DllNotFoundException: ulua
LuaInterface.LuaState..ctor () (at Assets/uLua/Core/Lua.cs:37)
HelloWorld.Start () (at Assets/uLua/Examples/01_HelloWorld/HelloWorld.cs:9)

解決方法

「Assets/uLua/Plugins」フォルダを「Assets/Plugins」に移動して
Unityプロジェクトを開き直す

【Unity】DateTime 型をわかりやすい形式の文字列に変換する拡張メソッド

はじめに

var dt = new DateTime( 2013, 3, 3, 12, 34, 56 );

Debug.Log( dt.ToString()          ); // 3/3/2013 12:34:56 PM
Debug.Log( dt.ToShortDateString() ); // 3/3/2013
Debug.Log( dt.ToLongDateString()  ); // Sunday, March 03, 2013
Debug.Log( dt.ToShortTimeString() ); // 12:34 PM
Debug.Log( dt.ToLongTimeString()  ); // 12:34:56 PM

ToString
ToShortDateString
ToLongDateString
ToShortTimeString
ToLongTimeString

DateTime型はこれらの関数を使用して特定の形式の文字列に変換できますが
Unity の場合、英語のカルチャで表示されてしまうため少しわかりづらいです

そのため、日本のカルチャで表示できる下記の拡張メソッドを作成しました

ソースコード

使い方

var dt = new DateTime( 2013, 3, 3, 12, 34, 56 );

Debug.Log( dt.ToPattern()             ); // 2013/03/03 12:34:56
Debug.Log( dt.ToShortDatePattern()    ); // 2013/03/03
Debug.Log( dt.ToLongDatePattern()     ); // 2013年3月3日
Debug.Log( dt.ToFullDateTimePattern() ); // 2013年3月3日 12:34:56
Debug.Log( dt.ToShortTimePattern()    ); // 12:34
Debug.Log( dt.ToLongTimePattern()     ); // 12:34:56

参考サイト様

DateTimeオブジェクトの時刻・日付から形式を指定して文字列に変換する - DateTimeからstringへの変換 : C# | iPentec
日時(DateTimeオブジェクト)を文字列に変換する - .NET Tips (VB.NET,C#...)

関連記事

【Unity】パフォーマンス改善 文字列連結編

はじめに

Unity+C# でゲームを開発している場合
StringBuilder クラスを使用して文字列連結することで
処理速度が高速化し、ガベージコレクションの実行回数を削減できます

検証用スクリプト

string クラスの文字列連結

using System;
using UnityEngine;

public class StringTest : MonoBehaviour
{
    private void Awake()
    {
        var start = Time.realtimeSinceStartup;
        var str = "";
        for ( var i = 0; i < 10000; i++ )
        {
            str += "ピカチュウ";
        }
        var elapsedTime = Time.realtimeSinceStartup - start;
        var count = GC.CollectionCount( 0 );
        Debug.Log( "経過時間: " + elapsedTime );
        Debug.Log( "GC回数: " + count );
    }
}

StringBuilder クラスの文字列連結

using System;
using System.Text;
using UnityEngine;

public class StringBuilderTest : MonoBehaviour
{
    private void Awake()
    {
        var start = Time.realtimeSinceStartup;
        var builder = new StringBuilder();
        for ( var i = 0; i < 10000; i++ )
        {
            builder.Append( "ピカチュウ" );
        }
        var elapsedTime = Time.realtimeSinceStartup - start;
        var count = GC.CollectionCount( 0 );
        Debug.Log( "経過時間: " + elapsedTime );
        Debug.Log( "GC回数: " + count );
    }
}

検証結果

クラス 経過時間 GC回数
string 1.309530000 秒 419 回
StringBuilder 0.004355669 秒 39 回

参考サイト様

http://ykimisaki.hatenablog.jp/entry/2014/08/02/040647 http://ykimisaki.hatenablog.jp/entry/2014/08/02/042917 http://ykimisaki.hatenablog.jp/entry/2014/08/06/151118

関連記事

【Unity】Inspector ビューを複数表示する

概要

Inspector ビューや Project ビューの右上に表示されている
3 本線のアイコンをクリックして「Add Tab>Inspector」を選択することで
Inspector ビューを複数表示できます

これだけだと、どちらの Inspector ビューにも
同じオブジェクトの情報が表示されてしまいますが
Inspector ビューの右上の鍵アイコンをクリックすることで
Inspector ビューに表示するオブジェクトの情報を固定できるので
違うオブジェクトの情報を
それぞれの Inspector ビューに表示できるようになります

関連記事