FC2ブログ

[Unity]NGUIとTexturePacker その1

  • Day:2013.01.13 01:00
  • Cat:Unity
NGUIで使用する画像ファイルはTexturePackerというツールで
1つのテクスチャにまとめると便利です。

TexturePacker - Create Sprite Sheets for your game!
http://www.codeandweb.com/texturepacker

上記のサイトからTexturePackerのインストーラをダウンロードできます。

今回はTexturePackerを使用して、画像ファイルをNGUIで使えるようにするために
1つのテクスチャに出力する方法を紹介します。

s-366.png

1.[Add Sprites]で使用する画像ファイルを選択する。
  または、[Add Folder]で画像ファイルが入ったフォルダを選択する。
  もしくは、[Sprites]ビューに画像ファイルをドラッグアンドドロップする。

00.png

2.[Data Format]を[Unity3D]に変更する。

01.png

3.[Data file]にテキストファイルを出力するフォルダを指定する。
  [Texture file]にテクスチャファイルを出力するフォルダを指定する。

02.png

4.Proライセンスを持っていない場合は、
  [Algorithm]を[Basic]に変更する。
  そして、[Trim]のチェックを外す。

03.png

5.[File]の[Export Image]を選択してテクスチャファイルを出力する。
  [File]の[Export Data]を選択してテキストファイルを出力する。

04.png

例えば「01.png」「02.png」「03.png」「04.png」をTexturePackerで指定して、
「Atlas.png」と「Atlas.txt」で出力した場合、
下記のようにテクスチャファイルとテキストファイルが生成されます。

06.png

こうして生成されたテクスチャファイルとテキストファイルをNGUIで使用します。

[Unity]ArrayPrefsを使用する

  • Day:2013.01.12 21:18
  • Cat:Unity
PlayerPrefsクラスでは、Vector3型や配列の保存や読み込みができません。
しかし、ArrayPrefsを使用することで可能になります。

インストール

ArrayPrefs - Unify Community Wiki
http://wiki.unity3d.com/index.php/ArrayPrefs

Unify Community Wikiの「PlayerPrefsX.cs」を
プロジェクトに追加することで使用可能になります。

できること

Vector3型を保存する
Vector3型を読み込む
int型の配列を保存する
int型の配列を読み込む
float型の配列を保存する
float型の配列を読み込む
string型の配列を保存する
string型の配列を読み込む


// Vector3型を保存する
PlayerPrefsX.SetVector3("PlayerPosition", transform.position);

// Vector3型を読み込む
transform.position = PlayerPrefsX.GetVector3("PlayerPosition");

// int型の配列を保存する
var myScores = new int[10];

for (var i = 0; i < myScores.Length; i++)
{
myScores[i] = i + 1;
}

PlayerPrefsX.SetIntArray("Scores", myScores);

// int型の配列を読み込む
var scores = PlayerPrefsX.GetIntArray("Scores");

// int型の配列を読み込む
// キーが存在しない場合、
// 10個の要素を持つint型の配列を作成し
// 各要素を0で初期化する
var scores = PlayerPrefsX.GetIntArray("Scores", 0, 10);

// float型の配列を保存する
var myCoords = new float[10];

for (var i = 0; i < myCoords.Length; i++)
{
myCoords[i] = i + 1.5f;
}

PlayerPrefsX.SetFloatArray("Coordinates", myCoords);

// float型の配列を読み込む
var myCoords = PlayerPrefsX.GetFloatArray("Coordinates");

// float型の配列を読み込む
// キーが存在しない場合、
// 10個の要素を持つfloat型の配列を作成し
// 各要素を0.5で初期化する
var myCoords = PlayerPrefsX.GetFloatArray("Coordinates", 0.5f, 10);

// string型の配列を保存する
var names = new string[10];

for (var i = 0; i < names.Length; i++)
{
names[i] = "Player" + (i + 1);
}

PlayerPrefsX.SetStringArray("Names", names);

// string型の配列を読み込む
var names = PlayerPrefsX.GetStringArray("Names");

// string型の配列を読み込む
// キーが存在しない場合、
// 10個の要素を持つstring型の配列を作成し
// 各要素を"Player"で初期化する
var names = PlayerPrefsX.GetStringArray("Names", "Player", 10);

[Unity]Inspectorで変更を元に戻せるようにする

  • Day:2012.12.31 22:08
  • Cat:Unity
Inspectorで変更を元に戻せるようにするためには
SerializedObjectSerializedPropertyを使用します。

拡張したいコンポーネントのクラス

using UnityEngine;

public class Pokemon : MonoBehaviour
{
public string Name;
public float Height;
public float Weight;
}
拡張エディタクラス

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Pokemon))]
public class PokemonEditor : Editor
{
private SerializedProperty nameProperty;
private SerializedProperty heightProperty;
private SerializedProperty weightProperty;

private void OnEnable()
{
nameProperty = serializedObject.FindProperty("Name");
heightProperty = serializedObject.FindProperty("Height");
weightProperty = serializedObject.FindProperty("Weight");
}

public override void OnInspectorGUI()
{
serializedObject.Update();

var name = EditorGUILayout.TextField("名前", nameProperty.stringValue);

if (name != nameProperty.stringValue)
{
nameProperty.stringValue = name;
}

var height = EditorGUILayout.FloatField("高さ", heightProperty.floatValue);

if (height != heightProperty.floatValue)
{
heightProperty.floatValue = height;
}

var weight = EditorGUILayout.FloatField("重さ", weightProperty.floatValue);

if (weight != weightProperty.floatValue)
{
weightProperty.floatValue = weight;
}

serializedObject.ApplyModifiedProperties();
}
}

ss01_20130106221441.png

パラメータを変更した後に、

ss02_20130106221442.png

Undoすることで、

ss03_20130106221440.png

パラメータを元に戻せます。

Unity Script Reference – SerializedObject
Unity Script Reference – SerializedProperty
Unity Script Reference – Editor

[Unity]Inspectorでマルチオブジェクトの編集を可能にする

  • Day:2012.12.30 21:58
  • Cat:Unity
Inspectorでマルチオブジェクトの編集を可能にするためには
CanEditMultipleObjects属性を使用します。

拡張したいコンポーネントのクラス

using UnityEngine;

public class Pokemon : MonoBehaviour
{
public string Name;
public float Height;
public float Weight;
}
拡張エディタクラス

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Pokemon))]
[CanEditMultipleObjects]
public class PokemonEditor : Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
}
}
複数のオブジェクトが存在して、

ss01_20130106220214.png
ss02_20130106220215.png

それらのオブジェクトが同時に選択された時、

ss03.png

拡張エディタクラスにCanEditMultipleObjects属性が適用されていない場合、
マルチオブジェクトの編集は不可能です。

ss04.png

拡張エディタクラスにCanEditMultipleObjects属性が適用されている場合、
マルチオブジェクトの編集は可能です。

ss05.png

Unity Script Reference – CanEditMultipleObjects

[Unity]デフォルトのInspectorを表示する

  • Day:2012.12.29 21:53
  • Cat:Unity
デフォルトのInspectorを表示するためには
Editor.DrawDefaultInspectorを使用します。

拡張したいコンポーネントのクラス

using UnityEngine;

public class Pokemon : MonoBehaviour
{
public string Name;
public float Height;
public float Weight;
}
拡張エディタクラス

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Pokemon))]
public class PokemonEditor : Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
}
}
ss_20130106215447.png

Unity Script Reference – Editor.DrawDefaultInspector