52 lines
1.3 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|