Question by
certifiedgamer · May 30 at 06:15 PM ·
bezier
Object following a bezier-curve moves in wrong direction
video of the issue
this object (blue and red sword) follows a bezier curve everytime i press "q" and is attached to the player but whenever i switch directions mid swing it starts moving the opposite direction after everytime i press "q"
Here is the code for following the curve:
public class wepFollowBezier : MonoBehaviour
{
[SerializeField] private Transform[] routes;
private int routeToGo;
private float tParam;
private Vector2 wepPosition;
private int isRight;
[SerializeField] private float speedModifier;
[SerializeField] private bool moveAllowed;
[SerializeField] public bool resetPos;
[SerializeField] private GameObject Player;
void Start()
{
routeToGo = 0;
tParam = 0f;
speedModifier = 2f;
moveAllowed = false;
resetPos = true;
}
void Update()
{
if (moveAllowed) {
StartCoroutine(GoByTheRoute(routeToGo));
}
}
private IEnumerator GoByTheRoute(int routeNumber) {
transform.parent = null;
moveAllowed = false;
Vector2 p0 = routes[routeNumber].GetChild(0).position;
Vector2 p1 = routes[routeNumber].GetChild(1).position;
Vector2 p2 = routes[routeNumber].GetChild(2).position;
Vector2 p3 = routes[routeNumber].GetChild(3).position;
while (tParam < 1) {
transform.Rotate(0, 0, Time.deltaTime * -700 * isRight);
tParam += Time.deltaTime * speedModifier;
wepPosition = Mathf.Pow(1 - tParam, 3) * p0 +
3 * Mathf.Pow(1 - tParam, 2) * tParam * p1 +
3 * (1 - tParam) * Mathf.Pow(tParam, 2) * p2 +
Mathf.Pow(tParam, 3) * p3;
transform.position = wepPosition;
yield return new WaitForEndOfFrame();
}
tParam = 0f;
routeToGo += 1;
if (routeToGo > routes.Length - 1) {
transform.parent = Player.transform;
transform.parent.GetComponent<Player1Pickup>().ResetWepPos();
transform.eulerAngles = new Vector3(0, 0, 0);
resetPos = true;
}
}
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220613061117im_/https://answers.unity.com/themes/thub/images/avi.jpg)