You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.3 KiB
67 lines
2.3 KiB
using UnityEngine; |
|
using System.Collections; |
|
|
|
|
|
namespace TMPro.Examples |
|
{ |
|
|
|
public class ObjectSpin : MonoBehaviour |
|
{ |
|
#pragma warning disable 0414 |
|
public enum MotionType { Rotation, SearchLight, Translation }; |
|
public MotionType Motion; |
|
|
|
public Vector3 TranslationDistance = new Vector3(5, 0, 0); |
|
public float TranslationSpeed = 1.0f; |
|
public float SpinSpeed = 5; |
|
public int RotationRange = 15; |
|
private Transform m_transform; |
|
|
|
private float m_time; |
|
private Vector3 m_prevPOS; |
|
private Vector3 m_initial_Rotation; |
|
private Vector3 m_initial_Position; |
|
private Color32 m_lightColor; |
|
|
|
void Awake() |
|
{ |
|
m_transform = transform; |
|
m_initial_Rotation = m_transform.rotation.eulerAngles; |
|
m_initial_Position = m_transform.position; |
|
|
|
Light light = GetComponent<Light>(); |
|
m_lightColor = light != null ? light.color : Color.black; |
|
} |
|
|
|
|
|
// Update is called once per frame |
|
void Update() |
|
{ |
|
switch (Motion) |
|
{ |
|
case MotionType.Rotation: |
|
m_transform.Rotate(0, SpinSpeed * Time.deltaTime, 0); |
|
break; |
|
case MotionType.SearchLight: |
|
m_time += SpinSpeed * Time.deltaTime; |
|
m_transform.rotation = Quaternion.Euler(m_initial_Rotation.x, Mathf.Sin(m_time) * RotationRange + m_initial_Rotation.y, m_initial_Rotation.z); |
|
break; |
|
case MotionType.Translation: |
|
m_time += TranslationSpeed * Time.deltaTime; |
|
|
|
float x = TranslationDistance.x * Mathf.Cos(m_time); |
|
float y = TranslationDistance.y * Mathf.Sin(m_time) * Mathf.Cos(m_time * 1f); |
|
float z = TranslationDistance.z * Mathf.Sin(m_time); |
|
|
|
m_transform.position = m_initial_Position + new Vector3(x, z, y); |
|
|
|
// Drawing light patterns because they can be cool looking. |
|
//if (Time.frameCount > 1) |
|
// Debug.DrawLine(m_transform.position, m_prevPOS, m_lightColor, 100f); |
|
|
|
m_prevPOS = m_transform.position; |
|
break; |
|
} |
|
} |
|
} |
|
} |