I initially had a projectile that moved directly out, but I want a sine pattern now. I found a code for a space shooter and it kind of works, but having issues getting it to go both directions now >< I feel pretty dumb now.
In my projectile:
[SerializeField]
private float speed = 5.0f;
private Rigidbody2D body2d;
private Vector3 direction;
public int damage;
public float frequency = 20.0f;
public float magnitude = 0.5f;
private Vector3 axis;
private Vector3 pos;
void Start()
{
pos = transform.position;
DestroyObject(gameObject, 1.0f);
axis = transform.up;
}
void FixedUpdate()
{
pos += transform.right * Time.deltaTime * speed;
transform.position = pos + axis * Mathf.Sin(Time.time * frequency) * magnitude;
}
public void Initialize(Vector3 direction)
{
this.direction = direction;
}
public void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Enemy")
{
other.GetComponent<batsController>().TakeDamage(damage);
//Destroy(gameObject);
}
}
void OnBecameInvisible()
{
Destroy(gameObject);
}
In my character abstract class:
protected Animator myAnimator;
[SerializeField]
public Transform heartPos;
[SerializeField]
protected float movementSpeed;
protected bool facingRight;
[SerializeField]
private GameObject heartPrefab;
public bool Attack { get; set; }
// Use this for initialization
public virtual void Start()
{
facingRight = true;
myAnimator = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
}
public void ChangeDirection()
{
facingRight = !facingRight;
transform.localScale = new Vector3(transform.localScale.x * -1, 2, 2);
}
public virtual void ThrowHeart(int value)
{
if (facingRight)
{
GameObject tmp = (GameObject)Instantiate(heartPrefab, heartPos.position, Quaternion.identity);
tmp.GetComponent<heartController>().Initialize(Vector3.right);
}
else
{
GameObject tmp = (GameObject)Instantiate(heartPrefab, heartPos.position, Quaternion.identity);
tmp.GetComponent<heartController>().Initialize(Vector3.left);
}
}
}