Guided projectile in unity3D

Viewed 26

I'm trying to create a guided projectile from a Player to a Target using a Bullet when using a key within the collider mesh, I'm struggling to find the error or make it work.

I had a clunky version working but struggled to Destroy(Bullet) once leaving the collider mesh.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;


public class catchEmAll : MonoBehaviour
{

    public GameObject enterText;
    public GameObject bullet;
    public GameObject target;
    public GameObject player;
  
    void Start()
    {
        enterText.SetActive(false);
    }

    // Update is called once per frame
    void OnTriggerStay(Collider plyr)
    {
        if (plyr.gameObject.tag == "Player")
        {
            enterText.SetActive(true);

            if (Input.GetButtonDown("Use"))
            {


              
                GameObject proj = Instantiate(bullet) as GameObject;
                var body = proj.GetComponent<Rigidbody>();
                Vector3 targetPosition = new Vector3(player.transform.position.x,player.transform.position.y,player.transform.position.z);
                Vector3 projPosition = new Vector3(proj.transform.position.x,proj.transform.position.y,proj.transform.position.z);
                body.AddForce(targetPosition - projPosition, ForceMode.Impulse);


            }
        }
    }
    void OnTriggerExit(Collider plyr)
    {
        if (plyr.gameObject.tag == "Player")
        {
            enterText.SetActive(false);
            //Destroy(projectile);
        }
    }
}

Any advice would be great!

1 Answers

Found a simple but nice way:

    using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof (Rigidbody))]
public class homingPigeon : MonoBehaviour {

    public Transform target;
    public float speed = 5f;
    public float rotateSpeed = .03f;

    private Rigidbody rb;

 void Start () {
        rb = GetComponent<Rigidbody>();
 }

 private void LateUpdate()
 {
        Vector3 direction = target.position - rb.position;
        direction.Normalize();

        Vector3 amountToRotate = Vector3.Cross(direction, transform.forward) * Vector3.Angle(transform.forward, direction);

        rb.angularVelocity = -amountToRotate * rotateSpeed;

        rb.velocity = transform.forward * speed;
 }
}
Related