using UnityEngine;
namespace ECM2.Walkthrough.Ex71
{
///
/// This example shows how to implement a rotating platform.
/// This will freely rotate at the given rotation speed along its defined rotationAxis.
///
[RequireComponent(typeof(Rigidbody))]
public class KinematicRotate : MonoBehaviour
{
#region FIELDS
[SerializeField]
private float _rotationSpeed = 30.0f;
public Vector3 rotationAxis = Vector3.up;
#endregion
#region PRIVATE FIELDS
private Rigidbody _rigidbody;
private float _angle;
#endregion
#region PROPERTIES
public float rotationSpeed
{
get => _rotationSpeed;
set => _rotationSpeed = value;
}
public float angle
{
get => _angle;
set => _angle = MathLib.ClampAngle(value, 0.0f, 360.0f);
}
#endregion
#region MONOBEHAVIOUR
public void OnValidate()
{
rotationSpeed = _rotationSpeed;
rotationAxis = rotationAxis.normalized;
}
public void Awake()
{
_rigidbody = GetComponent();
_rigidbody.isKinematic = true;
}
public void FixedUpdate()
{
angle += rotationSpeed * Time.deltaTime;
Quaternion rotation = Quaternion.AngleAxis(rotationSpeed * Time.deltaTime, rotationAxis.normalized);
_rigidbody.MoveRotation(_rigidbody.rotation * rotation);
}
#endregion
}
}