Interpolated movement in a circle
so far I have a shield that you can move around the player and point any direction, and it faces the right direction and everything, Excellent! However the shield just teleports to wherever the stick is pointing rather than rotating into the new position.
I've tried lerping and slerping to make it happen but all it does is move in a line to the new place cutting through the player rather than moving in s smooth circle around them as it would if you rotated the stick
Here's the working code I'm using so far, appreciate any help you could give thanks!
edit: In case it's not obvious I'm doing this in 2D mode :)
public class ShieldMovement : MonoBehaviour {
public Transform target; //player shield is attaced to
float distance = 0.8f; // distance from player so it doesn't clip
Vector3 direction = Vector3.up;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
float angle = Mathf.Atan2 (Input.GetAxisRaw("rightH"), Input.GetAxisRaw("rightV"))* Mathf.Rad2Deg;
if(Mathf.Abs(Input.GetAxis("rightH")) > 0.15f || Mathf.Abs(Input.GetAxis("rightV")) > 0.15f)
{
direction = new Vector3(Input.GetAxis("rightH"),Input.GetAxis("rightV"), 0.0f ) ;
}
Ray ray = new Ray(target.position, direction);
transform.position = ray.GetPoint(distance);
if(Mathf.Abs(Input.GetAxis("rightH")) > 0.15f || Mathf.Abs(Input.GetAxis("rightV")) > 0.15f)
{
transform.rotation = Quaternion.AngleAxis(angle,Vector3.forward*-1);
}
}
}
Answer by harko12 · Jan 25, 2016 at 09:51 PM
I think you are close, but what you would want to do is a quaternion.lerp after the if on line 25, rather than just directly set the rotation. Like
if(Mathf.Abs(Input.GetAxis("rightH")) > 0.15f || Mathf.Abs(Input.GetAxis("rightV")) > 0.15f)
{
var newAngle = Quaternion.AngleAxis(angle,Vector3.forward*-1);
var lerpAngle = Quaternion.Lerp(transform.rotation, newAngle, .5f * time.DeltaTime);
transform.rotation = lerpAngle;
}
I think that would do what you want. You'll have to adjust the speed to your liking;. you might also want to skip the lerp at a certain point when it gets close to where you want it,
Your answer
Follow this Question
Related Questions
Slerp rotation issue when calling a lot 0 Answers
Unfortunately, (GameName) has stopped (report ,ok) 0 Answers
Animation Looping Incorrectly 0 Answers
Slowly increase or decrease between two int values? 0 Answers
changing rpm when shifting 1 Answer