position.width
position.height で取得可能
using ディレクティブまたはアセンブリ参照が不足しています。の原因
調べると、拡張定義元と呼び出し元の .NET フレームワークのバージョン違いなどがあるようだが、
自分の場合は、拡張メソッドのクラスに public を付けていなかったのが原因だった。
他にも Unity の Assets > Open C# Project などで一度エディタとの同期をとってやると直る事があるので試してみる価値あり。
[追記]
自分のクラスでエラーが出ている時にビルドすると
NGUI など他のアセットで「using ディレクティブまたはアセンブリ参照が不足しています。」が出る事があるようだ。
自分のクラスのエラーを全て直してクリーン&ビルドすれば直った。
自分の場合は、拡張メソッドのクラスに public を付けていなかったのが原因だった。
他にも Unity の Assets > Open C# Project などで一度エディタとの同期をとってやると直る事があるので試してみる価値あり。
[追記]
自分のクラスでエラーが出ている時にビルドすると
NGUI など他のアセットで「using ディレクティブまたはアセンブリ参照が不足しています。」が出る事があるようだ。
自分のクラスのエラーを全て直してクリーン&ビルドすれば直った。
GameObject を他の GameObject の子にする方法
Unity の Hierarchy 内で GameObject を階層構造にしたい時、
例えば、B という GameObject を A の子にしたい時は、
GameObject a = new GameObject("A");
GameObject b = new GameObject("B");
b.transform.parent = a.transform;
のように transform の parent を親にしたい GameObject の
transform にすると階層化される。
A
└B
例えば、B という GameObject を A の子にしたい時は、
GameObject a = new GameObject("A");
GameObject b = new GameObject("B");
b.transform.parent = a.transform;
のように transform の parent を親にしたい GameObject の
transform にすると階層化される。
A
└B
Unity で Window 上のマウス座標を知りたい時
Event.current.mousePosition でわかる。
EditorWindow 内で毎フレーム移動座標が欲しい場合は、
初期化時に wantsMouseMove を true にする必要あり。
参考:Unity のリファレンス
http://docs.unity3d.com/Documentation/ScriptReference/EditorWindow-wantsMouseMove.html
なお、 SceneView 内のマウス座標は、 Input.mousePosition を使う。
EditorWindow 内で毎フレーム移動座標が欲しい場合は、
初期化時に wantsMouseMove を true にする必要あり。
参考:Unity のリファレンス
http://docs.unity3d.com/Documentation/ScriptReference/EditorWindow-wantsMouseMove.html
なお、 SceneView 内のマウス座標は、 Input.mousePosition を使う。
Flash CS6のスプライトシート書き出し後 C/C++用UVテーブルを作成する
Flash CS6 でスプライトシートを書き出すという便利な機能があるが、
各スプライトのUVがXMLで吐き出されるため
スプライトシートを作ったはいいけど、iOSのOpenGLで使う時など
C/C++ でも使える形式に変換するものがないので Python で簡易スクリプトを書いてみた。
動作確認は Python2.7.2 Windows7 。 バッチ処理は Windows 向けだが
Python スクリプト自体は他の環境でも動くと思われる。
まずは以下の Python スクリプトをコピペして保存。
=====[ convert.py ]=====
あとは引数に xml のファイルパスを渡してやれば
ファイル名_out.txt というファイルで enum とテーブルに変換したものを吐き出す。
適当にバッチ化してやると楽かも。
例えば、Windows ならさらに以下の様なバッチファイルを作成する。
=====[ convert.bat ]=====
echo off
python convert.py %1
pause
=========================
以後、このバッチに処理したい xml をドラッグするだけでコンバートされる。
ちなみに enum で定義される名前は、
シンボル名をそのまま使うのでシンボル名に全角を使わないような工夫が必要です。
各スプライトのUVがXMLで吐き出されるため
スプライトシートを作ったはいいけど、iOSのOpenGLで使う時など
C/C++ でも使える形式に変換するものがないので Python で簡易スクリプトを書いてみた。
動作確認は Python2.7.2 Windows7 。 バッチ処理は Windows 向けだが
Python スクリプト自体は他の環境でも動くと思われる。
まずは以下の Python スクリプトをコピペして保存。
=====[ convert.py ]=====
# -*- coding: utf-8 -*-
import codecs
import sys, re
sys.stdout = codecs.lookup('utf-8')[-1](sys.stdout)
print u"open file.\n"
inname = sys.argv[1]
trimname= inname.split('\\')[-1].split('.xml')[0]
f = codecs.open (inname, 'r', 'utf-16')
data = f.read ()
print u"file size: " + unicode (len (data)) + u" byte(s).\n"
#print data
f.close ()
print u"replace text.\n"
xlist = re.findall (r'x="([0-9]+)"', data)
ylist = re.findall (r'y="([0-9]+)"', data)
wlist = re.findall (r'width="([0-9]+)"', data)
hlist = re.findall (r'height="([0-9]+)"', data)
nlist = re.findall (r'name="([a-zA-Z0-9_]+)"', data)
out = u"typedef struct{ int x, y, w, h } ssuv;\n\n"
if len (xlist) == len (ylist) and len (xlist) == len (wlist) and len (xlist) == len (hlist) and len (xlist) == len (nlist):
i = 0
out += u"enum {\n"
for x in xlist:
print nlist[i]
out += u"\t%(name)s,\n" % {'name' : nlist[i][:-4] }
i += 1
out += u"};\n\n"
i = 0
out += u"ssuv %(valuename)s_tex[] = {\n" % {'valuename':trimname}
for x in xlist:
out += u"\t{%(X)d, %(Y)d, %(W)d, %(H)d},\n" % { 'X':int (xlist[i]), 'Y':int (ylist[i]), 'W':int (wlist[i]), 'H':int (hlist[i])}
i += 1
out += u"};\n"
print u"output file."
f = open (trimname + "_out.txt", 'w')
f.write (out)
f.close ()
========================あとは引数に xml のファイルパスを渡してやれば
ファイル名_out.txt というファイルで enum とテーブルに変換したものを吐き出す。
適当にバッチ化してやると楽かも。
例えば、Windows ならさらに以下の様なバッチファイルを作成する。
=====[ convert.bat ]=====
echo off
python convert.py %1
pause
=========================
以後、このバッチに処理したい xml をドラッグするだけでコンバートされる。
ちなみに enum で定義される名前は、
シンボル名をそのまま使うのでシンボル名に全角を使わないような工夫が必要です。