Quaternion
Quaternion
Quaternion je třída pro rotaci objektu.
Statické vlastnosti:
- identity - Nastaví hodnoty na 0.0, 0.0, 0.0, a 1.0.
Vlastnosti:
Veřejné metody
- Set - Nastaví komponenty x, y, z a w.
- SetFromToRotation - Nastaví rotaci od prvního objektu k cílovému objektu.
- SetLookRotation - Vytvoří rotaci s určenými směry vpřed a vzhůru.
- ToAngleAxis - Vrátí úhel a osy rotace.
Statické metody
- Angle - Vrátí úhel ve stupních mezi dvěma rotacemi.
- AngleAxis - Vytvoří rotaci s daným úhlem a osami.
- Euler - Otočí objektem ve stupních.
- FromToRotation - Vytvoří rotaci, která se rotuje od směru na směr.
- Inverse - Invertuje rotaci.
- Lerp - Rotuje objektem z výchozí rotace do cílové za určitý čas v rozsahu 0-1.
- LerpUnclamped - Stejně jako Lerp. Čas není držen v rozsahu.
- RotateTowards - Vždy přičte k aktuální hodnotě přírůstek až do cílové hodnoty.
- Slerp - Stejně jako Lerp. Nevidím rozdíl.
- SlerpUnclamped - Stejně jako LerpUnclamped. Nevidím rozdíl.
eulerAngles
Vector3 uhel = rotation.eulerAngles;
uhel.z += 5 * rotationSpeed;
rotation.eulerAngles = uhel;
transform.rotation = rotation;
SetFromToRotation
public Transform m_NextPoint;
Quaternion m_MyQuaternion;
float m_Speed = 1.0f;
Vector3 m_MousePosition;
// Use this for initialization
void Start()
{
m_MyQuaternion = new Quaternion();
}
// Update is called once per frame
void Update()
{
//Nastaví rotaci Quaternion z pozice GameObject na další pozici
m_MyQuaternion.SetFromToRotation(transform.position, m_NextPoint.position);
//Přesune GameObject do cíle
transform.position = Vector3.Lerp(transform.position, m_NextPoint.position, m_Speed * Time.deltaTime);
//Rotuje GameObjectem
transform.rotation = m_MyQuaternion * transform.rotation;
// NEBO
//Získa pozici myši
m_MousePosition = Input.mousePosition;
//Nastaví pozici myši z
m_MousePosition.z = 50.0f;
//Transformuje pozici myši na světový prostor
m_MousePosition = Camera.main.ScreenToWorldPoint(m_MousePosition);
//Nastaví rotaci Quaternion z pozice GameObject na pozici myši
m_MyQuaternion.SetFromToRotation(transform.position, m_MousePosition);
//Přesune GameObject na pozici myši
transform.position = Vector3.Lerp(transform.position, m_MousePosition, m_Speed * Time.deltaTime);
//Rotuje GameObjectemna pozici myši
transform.rotation = m_MyQuaternion * transform.rotation;
}
SetLookRotation
m_MousePosition= Input .mousePosition;
m_MousePosition.z = 50.0f;
m_MousePosition = Camera .main.ScreenToWorldPoint(m_MousePosition);
m_MyQuaternion.SetFromToRotation( new Vector3(1,1,1), m_MousePosition);
transform.localRotation = m_MyQuaternion;
ToAngleAxis
public float angle = 0F;
public Vector3 axis = Vector3 .zero;
void Update ()
{
transform.rotation.ToAngleAxis(out angle, out axis);
}
Angle
public Transform target;
void Update()
{
float angle = Quaternion.Angle(transform.rotation, target.rotation);
}
AngleAxis
public int angle;
public Vector3 axis;
void Update()
{
transform.rotation = Quaternion.AngleAxis(angle, axis);
}
Euler
x += Time.deltaTime * 10;
transform.rotation = Quaternion.Euler(x, 0, 0);
FromToRotation
transform.rotation = Quaternion.FromToRotation(Vector3.up, transform.forward);
Lerp
public Transformfrom;
public Quaternion to;
public float speed = 0.1F;
transform.rotation = Quaternion.Lerp(from.rotation, to, Time.time * speed);
RotateTowards
public Transform target;
public float speed;
float step = speed * Time.deltaTime;
transform.rotation = Quaternion.RotateTowards(transform.rotation, target.rotation, step);