zoom zoom
This commit is contained in:
1 parent
7be44fd86c
commit
148258255c
12 files changed
+1061
-195
No files matched your search
+129
-99
@@ -1,120 +1,150 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class ShipControls : MonoBehaviour
|
||||
{
|
||||
//Use to switch between Force Modes
|
||||
public class ShipControls : MonoBehaviour {
|
||||
enum ModeSwitching { Start, Impulse, Acceleration, Force, VelocityChange };
|
||||
ModeSwitching m_ModeSwitching;
|
||||
|
||||
Vector3 m_StartPos, m_StartForce;
|
||||
Vector3 m_NewForce;
|
||||
Vector3 m_StartPos;
|
||||
Vector3 m_StartForce;
|
||||
Vector3 m_Thrust;
|
||||
float m_thrustBase;
|
||||
float m_stabliseMag;
|
||||
|
||||
Rigidbody m_Rigidbody;
|
||||
|
||||
public float m_ForceAmp;
|
||||
public GameObject ship;
|
||||
public Camera camera;
|
||||
|
||||
void Start()
|
||||
{
|
||||
//You get the Rigidbody component you attach to the GameObject
|
||||
void Start() {
|
||||
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;
|
||||
m_Thrust = new Vector3(0.0f, 0.0f, 0.0f);
|
||||
m_StartPos = camera.transform.position;
|
||||
m_StartForce = m_Rigidbody.transform.forward;
|
||||
m_thrustBase = 10.0f;
|
||||
m_stabliseMag = 75.0f;
|
||||
Cursor.lockState = CursorLockMode.Locked;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
void Update() {
|
||||
// update the thrust vector every frame
|
||||
m_Thrust = camera.transform.forward;
|
||||
|
||||
//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;
|
||||
}
|
||||
// do everything else input related on every frame too
|
||||
processInput();
|
||||
}
|
||||
|
||||
void FixedUpdate() {
|
||||
float thrustMag = getThrustMagnitude();
|
||||
m_Rigidbody.AddForce(m_Thrust * thrustMag, ForceMode.Acceleration);
|
||||
|
||||
|
||||
// stablise ship towards camera position
|
||||
float step = m_stabliseMag * Time.fixedDeltaTime;
|
||||
m_Rigidbody.rotation = Quaternion.RotateTowards(transform.rotation, camera.transform.rotation, step);
|
||||
}
|
||||
|
||||
float getThrustMagnitude() {
|
||||
if (Input.GetMouseButton(0))
|
||||
return 1.0f * m_thrustBase;
|
||||
|
||||
if (Input.GetMouseButton(1))
|
||||
return -1.0f * m_thrustBase;
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
void processInput() {
|
||||
if (Input.GetKey(KeyCode.Space))
|
||||
Respawn();
|
||||
}
|
||||
|
||||
void Respawn() {
|
||||
m_Thrust = new Vector3(0.0f, 0.0f, 0.0f);
|
||||
transform.position = m_StartPos;
|
||||
m_Rigidbody.transform.forward = m_StartForce;
|
||||
}
|
||||
|
||||
// {
|
||||
// //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 = camera.transform.position;
|
||||
// }
|
||||
|
||||
// //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.Startt
|
||||
// //This resets the GameObject and Rigidbody to their starting positions
|
||||
// transform.position = m_StartPos;
|
||||
// m_Rigidbody.transform.forward = 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
|
||||
// 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
|
||||
// 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
|
||||
// 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
|
||||
// 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;
|
||||
}
|
||||
// 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;
|
||||
}
|
||||
// //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 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;
|
||||
}
|
||||
// //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;
|
||||
}
|
||||
}
|
||||
// //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;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
Reference in new issue
Block a user