Showing posts with label 유니티. Show all posts
Showing posts with label 유니티. Show all posts

Saturday, February 1, 2014

Unity에서 빌보드 설정하기

Lookat 함수를 이용하는 방법도 있지만 전통적인 방법으로 행렬을 설정하고 그 행렬로 Transform을 변경하는 방법으로 빌보드를 구현해 보았다.


using UnityEngine;
using System.Collections;

public class billboard : MonoBehaviour {

// Use this for initialization
void Start () {

}

public static void TransformFromMatrix(Matrix4x4 matrix, Transform trans) {
trans.rotation = Quaternion.Inverse(QuaternionFromMatrix(matrix));
trans.position = matrix.GetColumn(3); // uses implicit conversion from Vector4 to Vector3
}

public static Quaternion QuaternionFromMatrix(Matrix4x4 m) {
// Adapted from: http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm
Quaternion q = new Quaternion();
q.w = Mathf.Sqrt( Mathf.Max( 0, 1 + m[0,0] + m[1,1] + m[2,2] ) ) / 2;
q.x = Mathf.Sqrt( Mathf.Max( 0, 1 + m[0,0] - m[1,1] - m[2,2] ) ) / 2;
q.y = Mathf.Sqrt( Mathf.Max( 0, 1 - m[0,0] + m[1,1] - m[2,2] ) ) / 2;
q.z = Mathf.Sqrt( Mathf.Max( 0, 1 - m[0,0] - m[1,1] + m[2,2] ) ) / 2;
q.x *= Mathf.Sign( q.x * ( m[2,1] - m[1,2] ) );
q.y *= Mathf.Sign( q.y * ( m[0,2] - m[2,0] ) );
q.z *= Mathf.Sign( q.z * ( m[1,0] - m[0,1] ) );
return q;
}

// Update is called once per frame
void Update ()
{

Vector3 origin = transform.position;
Vector3 cameraPos = Camera.main.transform.position;

Vector3 w = cameraPos - origin;
w = w.normalized;

Vector3 u = Vector3.Cross (Vector3.up, w);
u = u.normalized;

Vector3 v = Vector3.Cross (w, u);

Matrix4x4 mat = new Matrix4x4 ();
/*mat.m00 = 1;
mat.m01 = 0;
mat.m02 = 0;
mat.m03 = 0;

mat.m10 = 0;
mat.m11 = 1;
mat.m12 = 0;
mat.m13 = 0;

mat.m20 = 0;
mat.m21 = 0;
mat.m22 = 1;
mat.m23 = 0;*/

mat.m00 = u.x;
mat.m01 = u.y;
mat.m02 = u.z;
mat.m03 = 0;

mat.m10 = v.x;
mat.m11 = v.y;
mat.m12 = v.z;
mat.m13 = 0;

mat.m20 = w.x;
mat.m21 = w.y;
mat.m22 = w.z;
mat.m23 = 0;

mat.m30 = origin.x;
mat.m31 = origin.y;
mat.m32 = origin.z;
mat.m33 = 1;

TransformFromMatrix (mat, gameObject.transform);
}
}

Task in UnrealEngine

 https://www.youtube.com/watch?v=1lBadANnJaw