52 lines
1.3 KiB
C#

using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody2D))]
public class RotateConstrained : Physics2DObject
{
[Header("Input keys")]
public Enums.KeyGroups typeOfControl = Enums.KeyGroups.ArrowKeys;
[Header("Rotation")]
public float speed = 5f;
[Header("Movement Constraint")]
[Range(0, 1)]
public float constraintRotationAmount = 0.3f;
private float spin;
// Update gets called every frame
void Update()
{
// Register the spin from the player input
// Moving with the arrow keys
if (typeOfControl == Enums.KeyGroups.ArrowKeys)
{
spin = Input.GetAxis("Horizontal");
}
else
{
spin = Input.GetAxis("Horizontal2");
}
}
// FixedUpdate is called every frame when the physics are calculated
void FixedUpdate()
{
//Freezes the objects rotation if it hits the constrained bounds
if ((this.transform.rotation.z >= constraintRotationAmount && spin <= 0f) || (this.transform.rotation.z <= -constraintRotationAmount && spin >= 0f))
{
rigidbody2D.freezeRotation = true;
}
else
{
rigidbody2D.freezeRotation = false;
// Apply the torque to the Rigidbody2D
rigidbody2D.AddTorque(-spin * speed);
}
}
}