Move from point A to B in a Sine pattern?
Hi, I am trying to make it so that the enemies in my game spawn from points and then move towards another point while moving in a sine wave along that path.
Here is the code I have written so far:
using UnityEngine;
using System.Collections;
public class SineWavePath : MonoBehaviour
{
public Vector2 startPosition;
public Vector2 endPosition = new Vector2(0f, 0f);
public float moveSpeed = 2.0f; // Speed to reach destination
public float frequency = 5.0f; // Speed of sine movement
public float magnitude = 0.25f; // Size of sine movement
private Vector2 pos;
private Vector2 dir;
private Vector2 perpendicularDir;
// Use this for initialization
void Start ()
{
transform.position = startPosition;
pos = startPosition;
dir = (endPosition - startPosition); // The direction and distance from startPosition to endPosition
Debug.DrawLine (pos, pos + dir, Color.red, Mathf.Infinity); // Draw a debug line from startPosition to endPosition
perpendicularDir = new Vector2(-dir.y, dir.x);
//Debug.DrawLine (pos, pos + perpendicularDir, Color.blue, Mathf.Infinity);
}
// Update is called once per frame
void Update ()
{
//pos += dir * Time.deltaTime * moveSpeed;
transform.Translate(dir * moveSpeed * Time.deltaTime);
transform.position = pos + perpendicularDir * Mathf.Sin (Time.time * frequency) * magnitude;
}
}
In Update(), the two lines which are uncommented work fine independently on each other. One line moves it towards the end point, the other line moves it in a sine wave perpendicular to the path it should travel toward the target. However, when both of these lines are active, it only moves in the sine wave pattern and not towards the target.
How can I make it so that it does both of these at once? Thanks for any tips!
combine two line to one.
transform.position = pos +dir * moveSpeed * Time.deltaTime
+ perpendicularDir * $$anonymous$$athf.Sin (Time.time * frequency) * magnitude;
Your answer
![](https://koobas.hobune.stream/wayback/20220612131940im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Rigidbody2D.MovePosition() doesn't do anything (but animations and transform.Translate() works) 0 Answers
2D Using C# moving game object back and forth and random stop in between - all in x-axis 2 Answers
Diagonal character movement 0 Answers
transform.translate limits 1 Answer
How to move a GameObject one after the other without having any gaps? 1 Answer