- Home /
Rotate vector3 relative to another vector3
In my game players move relative to their camera position. Code looks like this
Vector3 velocity = new Vector3(input.x, 0.0f, input.y);
velocity = Camera.main.transform.rotation * velocity;
How can I adapt it to not use an object transform's rotation but instead use a Vector3 (forward direction)? What I need is to be able to use a Vector3 as therelative forward (in my case based on player's team). This is my "forward vector".
Vector3 movementRelativeVector = player.Team ==0 ? -Vector3.forward : Vector3.forward;
velocityY needs to align with movementRelativeVector direction;
Answer by Zodiarc · Oct 26, 2016 at 12:31 PM
If you can use transform.Translate instead of velocity it's rather easy:
transform.Translate(new Vector3(xMove, 0, zMove), camera.transform);
https://docs.unity3d.com/ScriptReference/Transform.Translate.html
But with velocity you need to make some more calculations (my old js code):
var right = this.cameraTransform.right;
var forward = this.cameraTransform.forward;
var v = this.inputParser.verticalLeftStick;
var h = this.inputParser.horizontalLeftStick;
moveDirection = v * forward + h * right;
moveDirection = moveDirection.normalized;
if(moveDirection != Vector3.zero){
transform.rotation = Quaternion.LookRotation(moveDirection);
transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed);
}
else {
this.transform.rotation.eulerAngles.x = 0;
this.transform.rotation.eulerAngles.z = 0;
}
You can replace the camera transform by any other transform and use velocity instead of translate. Be aware that with this approach the character will always face the direction he will move to relative to the (in this case) camera (like fo example in dark souls).
I'm almost replacing my vector with a transform, but I'm sure that is unnecessary. What I wanted was to be able to do it without any transforms.
I highly doubt this is possible. A vector os nothing more than a point in space. You need some kind of spanning direction for the "parent" cooridnate system.
Your answer
Follow this Question
Related Questions
Rotate object based on hit normal + matching camera direction 0 Answers
Get rotation from a vector direction. 1 Answer
3D nested Turret Prefab Rotation 1 Answer
Rotating a direction Vector3 by Quaternion 2 Answers
Quaternion amount/value of rotation? 2 Answers