Moving forward based off of Rotation
I'm trying to be able to click a button and rotation around an object and then continue moving in a new direction based off of the rotation of the ship.
So the ship is a triangle, and the front is where the smallest angle is (like a ship). I have a cube that I'm able to rotate around and the radius is not fixed, the radius is however distant I am from the cube when I press a button. When I rotate the "front" of the ship will change or also the 'y rotation' I then want to continue moving in the direction that the 'y rotation' is facing if that makes any sense.
Edit: I forgot to add that everything works fine, kind of.. I get this error: Assets/Scripts/NewControll.cs(39,93): error CS1729: The type UnityEngine.Vector3' does not contain a constructor that takes
1' arguments
So the rotation works alright, but I can't move based off of the rotation and now I can't even play because of that error.
Here is the code I have. C#
using UnityEngine;
using System.Collections;
public class NewControll : MonoBehaviour {
GameObject cube;
GameObject Player;
public Transform center;
public Vector3 axis = Vector3.up;
public Vector3 desiredPosition;
public float radius;
public float radiusSpeed;
public float rotationSpeed;
public float speed;
public float tilt;
public Boundary boundary;
public GameObject shot;
public Transform shotSpawn;
public float fireRate;
private float nextFire;
void Start () {
cube = GameObject.FindWithTag("Cube");
center = cube.transform;
transform.position = (transform.position - center.position).normalized;
}
void FixedUpdate()
{
//float moveHorizontal = Input.GetAxis ("Horizontal");
//float moveVertical = Input.GetAxis ("Vertical");
Vector3 movement = new Vector3 (Player.transform.rotation * Vector3.forward);
GetComponent<Rigidbody>().velocity = movement * speed;
// GetComponent<Rigidbody>().position = new Vector3
// (
// Mathf.Clamp (GetComponent<Rigidbody>().position.x, boundary.xMin, boundary.xMax),
// 0.0f,
// Mathf.Clamp (GetComponent<Rigidbody>().position.z, boundary.zMin, boundary.zMax)
// );
//
// GetComponent<Rigidbody>().rotation = Quaternion.Euler (0.0f, 0.0f, GetComponent<Rigidbody> ().velocity.x * -tilt);
}
void Update () {
if (Input.GetButton("Fire1"))
{
transform.RotateAround (center.position, axis, rotationSpeed * Time.deltaTime);
//desiredPosition = (transform.position - center.position).normalized * radius + center.position;
//transform.position = Vector3.MoveTowards (transform.position, desiredPosition, Time.deltaTime * radiusSpeed);
}
}
}
Answer by Maruder · Sep 23, 2015 at 03:08 AM
@Kulture Rewrite
Vector3 movement = new Vector3 (Player.transform.rotation * Vector3.forward);
as:
Vector3 movement = Player.transform.rotation * Vector3.forward;
using the constructor for Vector3 only supports 3 float parameters: x,y,z to be entered in
i.e.
Vector3 example = new Vector3(x-component,y-component,z-component);
Answer by sum1nil · Aug 27, 2018 at 05:09 PM
This is an old question but I ran across it looking for a quick answer so I thought I would add my solution that seems to work.
After rotating my gameObject, I used the following to move it in the rotated direction:
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
movement.Set(h, 0f, v);
movement = movement.normalized * speed * Time.deltaTime;
movement = transform.worldToLocalMatrix.inverse * movement;
playerRigidbody.MovePosition(transform.position + movement);
Answer by ricardomaroquio · Aug 31, 2018 at 02:50 PM
This is the best and simpler way in my opinion:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CarController : MonoBehaviour {
public float speed = 0;
private void FixedUpdate()
{
transform.Translate(0, 0, speed * Time.deltaTime, Space.Self);
}
void Update () {
if (Input.GetKey(KeyCode.UpArrow))
{
speed++;
}
if (Input.GetKey(KeyCode.DownArrow))
{
speed--;
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(0, -1, 0);
}
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Rotate(0, 1, 0);
}
}
}
Your answer
Follow this Question
Related Questions
I'm having problems instaniating 0 Answers
How can I incorporate a Rotation Towards the Mouse Position into this Script? I Tried. 0 Answers
How to adjust a GameObject's rotation to face it's moving direction ? 0 Answers
Get player to face the direction of movement 1 Answer
Character movement that ends with a specific facing 0 Answers