123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- using System;
- using UnityEngine;
- using Random = UnityEngine.Random;
- namespace Dustyroom {
- public class LinearMotion : MonoBehaviour {
- public enum TranslationMode {
- Off,
- XAxis,
- YAxis,
- ZAxis,
- Vector
- }
- public enum RotationMode {
- Off,
- XAxis,
- YAxis,
- ZAxis,
- Vector
- }
- public TranslationMode translationMode = TranslationMode.Off;
- public Vector3 translationVector = Vector3.forward;
- public float translationSpeed = 1.0f;
- public RotationMode rotationMode = RotationMode.Off;
- public Vector3 rotationAxis = Vector3.up;
- public float rotationSpeed = 50.0f;
- public bool useLocalCoordinate = true;
- public float translationAcceleration = 0f;
- public float rotationAcceleration = 0f;
- private Vector3 TranslationVector {
- get {
- switch (translationMode) {
- case TranslationMode.XAxis: return Vector3.right;
- case TranslationMode.YAxis: return Vector3.up;
- case TranslationMode.ZAxis: return Vector3.forward;
- case TranslationMode.Vector: return translationVector;
- case TranslationMode.Off:
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
- return Vector3.zero;
- }
- }
- Vector3 RotationVector {
- get {
- switch (rotationMode) {
- case RotationMode.XAxis: return Vector3.right;
- case RotationMode.YAxis: return Vector3.up;
- case RotationMode.ZAxis: return Vector3.forward;
- case RotationMode.Vector: return rotationAxis;
- case RotationMode.Off:
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
- return Vector3.zero;
- }
- }
- void Update() {
- if (translationMode != TranslationMode.Off) {
- Vector3 positionDelta = TranslationVector * translationSpeed * Time.deltaTime;
- if (useLocalCoordinate) {
- transform.localPosition += positionDelta;
- }
- else {
- transform.position += positionDelta;
- }
- }
- if (rotationMode == RotationMode.Off) return;
- Quaternion rotationDelta = Quaternion.AngleAxis(
- rotationSpeed * Time.deltaTime, RotationVector);
- if (useLocalCoordinate) {
- transform.localRotation = rotationDelta * transform.localRotation;
- }
- else {
- transform.rotation = rotationDelta * transform.rotation;
- }
- }
- private void FixedUpdate() {
- translationSpeed += translationAcceleration;
- rotationSpeed += rotationAcceleration;
- }
- }
- }
|