- Home /
Question by
CypherGames · Dec 24, 2013 at 12:11 AM ·
rigidbodyaxisplatformer
Platformer axis change
I am making a 3D platformer, and there is an ability to change from Z axis movement to X axis movement.
Z Axis:

X Axis:

I am trying to stop the movement, rotate the player so I don't have to mess with my player move script(uses rigidbody.AddRelativeTorque), and rotate the camera around the player 90 degrees. Please help me.
AxisChange.cs:
public class AxisChange : MonoBehaviour
{
public string axis = "Horizontal";
Transform player;
void Start()
{
player = GameObject.Find("Player").transform;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.F))
{
switch (axis)
{
case "Horizontal":
axis = "Vertical";
transform.RotateAround(player.position, Vector3.up, 90f);
player.rigidbody.AddTorque(new Vector3(0f, 0f, 0f));
player.transform.rotation = Quaternion.identity;
player.Rotate(Vector3.up, 90f);
break;
case "Vertical":
axis = "Horizontal";
transform.RotateAround(player.position, Vector3.up, -90f);
player.rigidbody.AddTorque(new Vector3(0f, 0f, 0f));
player.transform.rotation = Quaternion.identity;
player.Rotate(Vector3.up, -90f);
break;
}
}
}
}
PlayerAI.cs:
public class PlayerAI : MonoBehaviour
{
public float walkSpeed = 6.0f;
public float sprintSpeed = 15.0f;
public float jumpSpeed = 7.0f;
public static float health = 100.0f;
public AudioClip jump;
public AudioClip hurt;
float speed;
Vector3 direction;
bool isGrounded = true;
bool isJumping = false;
Gravity gravityScript;
void Start()
{
gravityScript = GameObject.Find("Main Camera").GetComponent<Gravity>();
Physics.gravity = new Vector3(0f, -9.81f, 0f);
}
void FixedUpdate()
{
float input = Input.GetAxis("Horizontal");
rigidbody.AddRelativeTorque(0, 0, input * speed * Time.deltaTime);
if (isJumping == true)
{
if (gravityScript.gravityDirection == Gravity.gravity.down)
rigidbody.velocity = new Vector3(rigidbody.velocity.x, jumpSpeed * Time.deltaTime, rigidbody.velocity.z);
if (gravityScript.gravityDirection == Gravity.gravity.left)
rigidbody.velocity = new Vector3(jumpSpeed * Time.deltaTime, rigidbody.velocity.y, rigidbody.velocity.z);
if (gravityScript.gravityDirection == Gravity.gravity.right)
rigidbody.velocity = new Vector3(-jumpSpeed * Time.deltaTime, rigidbody.velocity.y, rigidbody.velocity.z);
if (gravityScript.gravityDirection == Gravity.gravity.up)
rigidbody.velocity = new Vector3(rigidbody.velocity.x, -jumpSpeed * Time.deltaTime, rigidbody.velocity.z);
isJumping = false;
}
}
void Update()
{
speed = Input.GetKey(KeyCode.LeftShift) ? sprintSpeed : walkSpeed;
if (Input.GetKey(KeyCode.Space) && isGrounded)
{
audio.PlayOneShot(jump);
isJumping = true;
isGrounded = false;
}
}
void OnCollisionEnter(Collision coll)
{
isGrounded = true;
}
void OnLevelWasLoaded()
{
Time.timeScale = 1.0f;
Time.fixedDeltaTime = 0.02f;
}
void TakeDamage(float damage)
{
audio.PlayOneShot(hurt);
}
}
If you can help me find a solution, please do.
Comment
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Restricting an object on its Zaxis. 2 Answers
Velocity relative to Local Axis 1 Answer
How make an object fall after a cube moves off the object? 1 Answer