120 lines
4.6 KiB
C#
Executable File
120 lines
4.6 KiB
C#
Executable File
using UnityEngine;
|
||
|
||
public class ShipControls : MonoBehaviour
|
||
{
|
||
//Use to switch between Force Modes
|
||
enum ModeSwitching { Start, Impulse, Acceleration, Force, VelocityChange };
|
||
ModeSwitching m_ModeSwitching;
|
||
|
||
Vector3 m_StartPos, m_StartForce;
|
||
Vector3 m_NewForce;
|
||
Rigidbody m_Rigidbody;
|
||
|
||
public float m_ForceAmp;
|
||
public GameObject ship;
|
||
|
||
void Start()
|
||
{
|
||
//You get the Rigidbody component you attach to the GameObject
|
||
m_Rigidbody = GetComponent<Rigidbody>();
|
||
|
||
//This starts at first mode (nothing happening yet)
|
||
m_ModeSwitching = ModeSwitching.Start;
|
||
|
||
//Initialising the force which is used on GameObject in various ways
|
||
m_NewForce = new Vector3(-5.0f, 1.0f, 0.0f);
|
||
|
||
//The GameObject's starting position and Rigidbody position
|
||
m_StartPos = transform.position;
|
||
m_StartForce = m_Rigidbody.transform.position;
|
||
}
|
||
|
||
void FixedUpdate()
|
||
{
|
||
//If the current mode is not the starting mode (or the GameObject is not reset), the force can change
|
||
if (m_ModeSwitching != ModeSwitching.Start)
|
||
{
|
||
//The force changes depending what you input into the text fields
|
||
m_NewForce = ship.transform.forward * m_ForceAmp;
|
||
}
|
||
|
||
//Here, switching modes depend on button presses in the Game mode
|
||
switch (m_ModeSwitching)
|
||
{
|
||
//This is the starting mode which resets the GameObject
|
||
case ModeSwitching.Start:
|
||
//This resets the GameObject and Rigidbody to their starting positions
|
||
transform.position = m_StartPos;
|
||
m_Rigidbody.transform.position = m_StartForce;
|
||
|
||
//This resets the velocity of the Rigidbody
|
||
m_Rigidbody.velocity = new Vector3(0f, 0f, 0f);
|
||
break;
|
||
|
||
//These are the modes ForceMode can force on a Rigidbody
|
||
//This is Acceleration mode
|
||
case ModeSwitching.Acceleration:
|
||
//Use Acceleration as the force on the Rigidbody
|
||
m_Rigidbody.AddForce(m_NewForce, ForceMode.Acceleration);
|
||
break;
|
||
|
||
//This is Force Mode, using a continuous force on the Rigidbody considering its mass
|
||
case ModeSwitching.Force:
|
||
|
||
//Use Force as the force on GameObject’s Rigidbody
|
||
m_Rigidbody.AddForce(m_NewForce, ForceMode.Force);
|
||
break;
|
||
|
||
//This is Impulse Mode, which involves using the Rigidbody’s mass to apply an instant impulse force.
|
||
case ModeSwitching.Impulse:
|
||
//Use Impulse as the force on GameObject
|
||
m_Rigidbody.AddForce(m_NewForce, ForceMode.Impulse);
|
||
break;
|
||
|
||
//This is VelocityChange which involves ignoring the mass of the GameObject and impacting it with a sudden speed change in a direction
|
||
case ModeSwitching.VelocityChange:
|
||
//Make a Velocity change on the Rigidbody
|
||
m_Rigidbody.AddForce(m_NewForce, ForceMode.VelocityChange);
|
||
break;
|
||
}
|
||
}
|
||
|
||
//The function outputs buttons, text fields, and other interactable UI elements to the Scene in Game view
|
||
void OnGUI()
|
||
{
|
||
//Press the button to reset the GameObject and Rigidbody
|
||
if (GUI.Button(new Rect(100, 0, 150, 30), "Reset"))
|
||
{
|
||
//This switches to the start/reset case
|
||
m_ModeSwitching = ModeSwitching.Start;
|
||
}
|
||
|
||
//When you press the Acceleration button, switch to Acceleration mode
|
||
if (GUI.Button(new Rect(100, 30, 150, 30), "Apply Acceleration"))
|
||
{
|
||
//Switch to Acceleration (apply acceleration force to GameObject)
|
||
m_ModeSwitching = ModeSwitching.Acceleration;
|
||
}
|
||
|
||
//If you press the Impulse button
|
||
if (GUI.Button(new Rect(100, 60, 150, 30), "Apply Impulse"))
|
||
{
|
||
//Switch to impulse (apply impulse forces to GameObject)
|
||
m_ModeSwitching = ModeSwitching.Impulse;
|
||
}
|
||
|
||
//If you press the Force Button, switch to Force state
|
||
if (GUI.Button(new Rect(100, 90, 150, 30), "Apply Force"))
|
||
{
|
||
//Switch to Force (apply force to GameObject)
|
||
m_ModeSwitching = ModeSwitching.Force;
|
||
}
|
||
|
||
//Press the button to switch to VelocityChange state
|
||
if (GUI.Button(new Rect(100, 120, 150, 30), "Apply Velocity Change"))
|
||
{
|
||
//Switch to velocity changing
|
||
m_ModeSwitching = ModeSwitching.VelocityChange;
|
||
}
|
||
}
|
||
} |