2013年2月27日水曜日

[python]開放されているポートを調べる

以前RealFlowを使用したとき、レンダーノードに
接続できなかったため、ポートチェックのために
pythonを使用しました。
from socket import *
import sys
if len(sys.argv[1:]) == 2:
    ip = sys.argv[1]
    sport = int(sys.argv[2])
    eport = sport + 1
elif len(sys.argv[1:]) == 3:
    ip = sys.argv[1]
    sport = int(sys.argv[2])
    eport = int(sys.argv[3]) + 1
else:
    exit()
for port in range(sport, eport):
    try:
        s = socket(AF_INET, SOCK_STREAM,0)
        s.settimeout(1)
        s.connect((ip,port))
        print str(port) + ':OK'
        s.close()
    except error, msg:
        print str(port) + ':' + str(msg)
RealFlowのレンダーノードは2223から2226を使用するので
python portCheck.py 2223 2226
で使用します。

2013年2月21日木曜日

[Unity3D]HingeJointを使った揺れモノ設定

キャラクタのヘアを揺らすための設定を
Hinge jointで考えてみました。











Hinge jointはグローバル座標でないとただしく動作しないので、
シーンに直接作成しています。
Sphereを作成してジョイントの代わりにPysicsコンポーネントを追加します。
Sphere1は物理の影響を受けさせたくないのでisKinematicをオンに
しておきます。

  • Sphere1にRigidBodyコンポーネントを追加
  • Sphere2,3,4にHinge jointを追加
  • Hinge joint>Connected Bodyに親のジョイントを設定
















次にCube1にHinge jointの親(Sphere1)にコンストレインさせるため
コンストレイン用のスクリプトを作成します。
using UnityEngine;
using System.Collections;

public class Constraint : MonoBehaviour {
	public Transform tr;
	private Quaternion rot;

	// Update is called once per frame
	void Update () {
		this.transform.position= tr.position;
		this.transform.rotation= Quaternion.Euler(	tr.eulerAngles.x,
													tr.eulerAngles.y,
													tr.eulerAngles.z );
	}
}
Sphere1にコンストレイントのコンポーネントを追加してターゲットに
Transform(Cube1)を設定します。

シーンを再生してCube1,Cube2を動かすと確認できます。

2013年2月15日金曜日

[Unity3D]iOSカメラ作成

前回につづきUnity3DのiOS用のカメラスクリプトを作成しました。

https://gist.github.com/hiko9lock/4959229

using UnityEngine;
using System.Collections;
public class TouchCamera : MonoBehaviour {
public Transform target;
Vector3 f0Dir= Vector3.zero;
float zoomDistance= 5;
float theta= 0.0F;
float fai= 0.0F;
float dx= 0.0F;
float dy= 0.0F;
float loc_x= 0.0F;
float loc_y= 0.0F;
float delta= 0.0F;
float deltaWeight= 0.05F;
Vector2 curDist= Vector2.zero;
Vector2 prevDist= Vector2.zero;
Transform dm;
Vector3 upVal= Vector3.zero;
Vector3 pos= new Vector3(0, 0, 0);
Vector3 rot= new Vector3(0, 0, 0);
void Update() {
if (Input.touchCount == 1) {
Touch f0 = Input.GetTouch(0);
Vector3 f0Delta2 = new Vector3(f0.deltaPosition.x, -f0.deltaPosition.y, 0);
f0Dir= f0Delta2;
loc_x= Mathf.Deg2Rad*f0Dir.x*1;
loc_y= -Mathf.Deg2Rad*f0Dir.y*1;
} else if( Input.touchCount== 2 ) {
loc_x= 0.0F;
loc_y= 0.0F;
Touch f0= Input.GetTouch(1);
Touch f1= Input.GetTouch(0);
Vector3 f0Delta= new Vector3(-f0.deltaPosition.x, -f0.deltaPosition.y, 0);
Vector3 f1Delta= new Vector3(-f1.deltaPosition.x, -f1.deltaPosition.y, 0);
float toDirection= Vector3.Dot(f0Delta, f1Delta);
Debug.Log(toDirection);
if(f1.phase == TouchPhase.Moved && f0.phase == TouchPhase.Moved){
if( toDirection > 0 ) {
f0Dir= Vector3.zero;
dy+= f0Delta.y*0.01F;
dx+= f0Delta.x*0.01F;
loc_x= f0Delta.x*0.01F;
loc_y= f0Delta.y*0.01F;
} else {
curDist = f0.position - f1.position;
prevDist = (f0.position - f0.deltaPosition) - (f1.position - f1.deltaPosition);
float delta = curDist.magnitude - prevDist.magnitude;
zoomDistance= zoomDistance+(-delta*deltaWeight);
}
}
} else {
f0Dir= Vector3.zero;
loc_x= 0.0F;
loc_y= 0.0F;
}
theta+= Mathf.Deg2Rad*f0Dir.x*1;
fai+= -Mathf.Deg2Rad*f0Dir.y*1;
upVal.z= zoomDistance*Mathf.Cos(theta)*Mathf.Sin(fai+Mathf.PI/2);
upVal.x= zoomDistance*Mathf.Sin(theta)*Mathf.Sin(fai+Mathf.PI/2);
upVal.y= zoomDistance*Mathf.Cos(fai+Mathf.PI/2);
transform.position= upVal;
target.transform.Translate( Camera.main.transform.up*loc_y+Camera.main.transform.right*(loc_x), Space.World);
transform.position+= target.position;
Camera.main.transform.LookAt(target.position);
}
}
view raw TouchCamera.cs hosted with ❤ by GitHub

2013年2月12日火曜日

Unity 3Dのカメラを作成(win,mac)

Unity3Dのカメラスクリプトを作成しました。
マウスのみ対応で、pan,zoom,orbitが可能です。
https://gist.github.com/hiko9lock/4760161

using UnityEngine;
using System.Collections;
public class AimCamera : MonoBehaviour {
public Transform target;
Vector3 f0Dir= Vector3.zero;
Vector3 upVal= Vector3.zero;
float zoomDistance= 5;
float theta= 0.0F;
float fai= 0.0F;
float loc_x= 0.0F;
float loc_y= 0.0F;
float panWeight= 0.5F;
void Update() {
if( Input.GetMouseButton(0) && !Input.GetKey("left alt" ) ) {
f0Dir= new Vector3(Input.GetAxis("Mouse X")*5.0F, -Input.GetAxis("Mouse Y")*5.0F, 0);
if( Input.GetKey("left alt")) {
loc_x= -Input.GetAxis("Mouse X")*1;
loc_y= -Input.GetAxis("Mouse Y")*1;
f0Dir= Vector3.zero;
}
} else if( Input.GetMouseButton(1)&& Input.GetKey("left alt") ) {
zoomDistance= zoomDistance+(-Input.GetAxis("Mouse X")+Input.GetAxis("Mouse Y"))*0.1F;
} else if( Input.GetMouseButton(2) ) {
loc_x= -Input.GetAxis("Mouse X")*panWeight;
loc_y= -Input.GetAxis("Mouse Y")*panWeight;
} else {
f0Dir= Vector3.zero;
loc_x= 0.0F;
loc_y= 0.0F;
}
theta+= Mathf.Deg2Rad*f0Dir.x*1;
fai+= -Mathf.Deg2Rad*f0Dir.y*1;
upVal.z= zoomDistance*Mathf.Cos(theta)*Mathf.Sin(fai+Mathf.PI/2);
upVal.x= zoomDistance*Mathf.Sin(theta)*Mathf.Sin(fai+Mathf.PI/2);
upVal.y= zoomDistance*Mathf.Cos(fai+Mathf.PI/2);
transform.position= upVal;
target.transform.Translate( Camera.main.transform.up*loc_y+Camera.main.transform.right*(loc_x), Space.World);
transform.position+= target.position;
Camera.main.transform.LookAt(target.position);
}
}
view raw AimCamera.cs hosted with ❤ by GitHub
使い方

  1. maimCameraにスクリプトをアタッチ
  2. targetに注視点用のgameObjectを設定
  • middleボタンでパン
  • LeftButtonでローテート
  • alt+RightButtonでズーム
transform.LookAtを使用しているため注視点用の
gameObjectを設定してください。

Unity3Dのassetのカメラスクリプトを拡張しようとしましたが
思ったとおりに制御できなかったので球座標系で位置を
計算しています。

2013年2月10日日曜日

Githubアカウント作成

Githubのアカウント作成しました。
URL https://github.com/hiko9lock

プログラマーではないのですがGithubにお世話になることが多々あるので 継続してチェックしているプロジェクトなど確認しやすくなりそうです。

 今はテストで作成したリポジトリしかありませんが、過去に作成したツールなども まとめていきたいと思います。

2013年2月7日木曜日

unity iOSプロファイラー

iOSではUnityのプロファイラーが使えないのでxCodeで有効にして
xCodeのOutPutWindowにプロファイル情報を表示させる必要があります。

 #define ENABLE_INTERNAL_PROFILER 1
結果はこちら。
iPhone Unity internal profiler stats:
cpu-player>    min:  3.3   max:  4.0   avg:  3.5
cpu-ogles-drv> min:  3.2   max:  4.0   avg:  3.7
cpu-present>   min:  0.9   max:  4.1   avg:  1.4
frametime>     min: 29.8   max: 36.6   avg: 33.4
draw-call #>   min:  11    max:  11    avg:  11     | batched:     0
tris #>        min: 13510  max: 13510  avg: 13510   | batched:     0
verts #>       min: 13368  max: 13368  avg: 13368   | batched:     0
player-detail> physx:  0.4 animation:  0.1 culling  0.0 skinning:  1.1 batching:  0.0 render:  1.5 fixed-update-count: 1 .. 2
mono-scripts>  update:  0.2   fixedUpdate:  0.0 coroutines:  0.0 
mono-memory>   used heap: 253952 allocated heap: 262144  max number of collections: 0 collection total duration:  0.0
詳細はこちら。
内蔵プロファイラでのパフォーマンス測定