62 lines
1.3 KiB
C#
62 lines
1.3 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
[AddComponentMenu("Playground/Movement/Push")]
|
|
[RequireComponent(typeof(Rigidbody2D))]
|
|
public class Push : Physics2DObject
|
|
{
|
|
[Header("Input key")]
|
|
|
|
// the key used to activate the push
|
|
public KeyCode key = KeyCode.Space;
|
|
|
|
[Header("Direction and strength")]
|
|
|
|
// strength of the push, and the axis on which it is applied (can be X or Y)
|
|
public float pushStrength = 5f;
|
|
public Enums.Axes axis = Enums.Axes.Y;
|
|
public bool relativeAxis = true;
|
|
|
|
|
|
private bool keyPressed = false;
|
|
private Vector2 pushVector;
|
|
|
|
|
|
// Read the input from the player
|
|
void Update()
|
|
{
|
|
keyPressed = Input.GetKey(key);
|
|
}
|
|
|
|
|
|
// FixedUpdate is called every frame when the physics are calculated
|
|
void FixedUpdate()
|
|
{
|
|
if(keyPressed)
|
|
{
|
|
pushVector = Utils.GetVectorFromAxis(axis) * pushStrength;
|
|
|
|
//Apply the push
|
|
if(relativeAxis)
|
|
{
|
|
rigidbody2D.AddRelativeForce(pushVector);
|
|
}
|
|
else
|
|
{
|
|
rigidbody2D.AddForce(pushVector);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Draw an arrow to show the direction in which the object will move
|
|
void OnDrawGizmosSelected()
|
|
{
|
|
if(this.enabled)
|
|
{
|
|
float extraAngle = (relativeAxis) ? transform.rotation.eulerAngles.z : 0f;
|
|
pushVector = Utils.GetVectorFromAxis(axis) * pushStrength;
|
|
Utils.DrawMoveArrowGizmo(transform.position, pushVector, extraAngle, pushStrength * .5f);
|
|
}
|
|
}
|
|
}
|