[Unity]Mathfxを使用する

  • Day:2013.01.15 22:22
  • Cat:Unity
Mathfxを使用することで
エルミート関数やバウンド関数が使用可能になります。

インストール

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

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

できること


for (var i = 0; i <= 10; i++)
{
var lerp = Mathfx.Lerp(0, 1, i * 0.1f);
var hermite = Mathfx.Hermite(0, 1, i * 0.1f);
var sinerp = Mathfx.Sinerp(0, 1, i * 0.1f);
var berp = Mathfx.Berp(0, 1, i * 0.1f);

Debug.Log(string.Format("{0}, {1}, {2}, {3}",
lerp.ToString("0.0000"),
hermite.ToString("0.0000"),
sinerp.ToString("0.0000"),
berp.ToString("0.0000")));
}

// Lerp Hermite Sinerp Berp
// 0.0000 0.0000 0.0000 0.0000
// 0.1000 0.0280 0.1564 0.3129
// 0.2000 0.1040 0.3090 0.5573
// 0.3000 0.2160 0.4540 0.7614
// 0.4000 0.3520 0.5878 0.9324
// 0.5000 0.5000 0.7071 1.0510
// 0.6000 0.6480 0.8090 1.0821
// 0.7000 0.7840 0.8910 1.0221
// 0.8000 0.8960 0.9511 0.9724
// 0.9000 0.9720 0.9877 1.0042
// 1.0000 1.0000 1.0000 1.0000

[Unity]ArrayPrefsを使用する その2

  • Day:2013.01.14 00:27
  • Cat:Unity
ArrayPrefsを使用することでVector3型や配列の保存や読み込みが可能になります。
さらに、ArrayPrefs2を使用することで
bool型やQuaternion型などの保存や読み込みも可能になります。

インストール

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

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

できること

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


// Vector2型を保存する
var coordinates = new Vector2(4f, 2f);
PlayerPrefsX.SetVector2("Coords", coordinates);

// Vector3型やQuaternion型を保存する
PlayerPrefsX.SetVector3("PlayerPosition", transform.position);
PlayerPrefsX.SetQuaternion("PlayerRotation", transform.rotation);

// Vector2型を読み込む
var coordinates = PlayerPrefsX.GetVector2("Coords");

// Vector3型やQuaternion型を読み込む
transform.position = PlayerPrefsX.GetVector3(
"PlayerPosition", new Vector3(100, 50, 0));
transform.rotation = PlayerPrefsX.GetQuaternion(
"PlayerRotation", Quaternion.Euler(90, 45, 0));

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

for (var i = 0; i < 10; i++)
{
numberArray[i] = Random.Range(-10, 11);
}

PlayerPrefsX.SetIntArray("Numbers", numberArray);

// int型のリストを保存する
var aList = new List<int>();

for (var i = 0; i < 10; i++)
{
aList.Add(i);
}

var anArray = aList.ToArray();

PlayerPrefsX.SetIntArray("Numbers", anArray);

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

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

// 保存した配列の型を出力する
PlayerPrefsX.ShowArrayType("Numbers");

[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

[Unity]InspectorにBounds型の入力フィールドを表示する

  • Day:2012.12.28 21:47
  • Cat:Unity
InspectorにBounds型の入力フィールドを表示するためには
EditorGUILayout.BoundsFieldを使用します。

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

using UnityEngine;

public class Pokemon : MonoBehaviour
{
public Bounds Bounds;
}
拡張エディタクラス

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Pokemon))]
public class PokemonEditor : Editor
{
public override void OnInspectorGUI()
{
var pokemon = target as Pokemon;

pokemon.Bounds =
EditorGUILayout.BoundsField("境界", pokemon.Bounds);
}
}
ss_20130106214930.png

Bounds型の入力フィールドを使用することで
コンポーネントのBounds型の値を簡単に変更することができます。

[Unity]InspectorにRect型の入力フィールドを表示する

  • Day:2012.12.27 21:43
  • Cat:Unity
InspectorにRect型の入力フィールドを表示するためには
EditorGUILayout.RectFieldを使用します。

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

using UnityEngine;

public class Pokemon : MonoBehaviour
{
public Rect Rect;
}
拡張エディタクラス

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Pokemon))]
public class PokemonEditor : Editor
{
public override void OnInspectorGUI()
{
var pokemon = target as Pokemon;

pokemon.Rect =
EditorGUILayout.RectField("長方形", pokemon.Rect);
}
}
ss_20130106214426.png

Rect型の入力フィールドを使用することで
コンポーネントのRect型の値を簡単に変更することができます。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。