Question by
TheCaptainCometh · Nov 19, 2017 at 01:01 PM ·
movementaiattack
Move and Attack ( for MOBA style minions)
So i'm making a MOBA (attempting lol), currently i have a script that makes them follow a set of waypoints to their goal and a basic turret script. Basically i need to combine the two scripts but i can't see to do it effectively mostly the attacking script isn't being called or isn't reaching the conditions. If anyone can help id appreciate it. Ill include the scripts below.
Movement public class MidBlueEnemy : MonoBehaviour {
public float speed = 10f;
private Transform target;
private int wavepointIndex = 0;
public float WaypointRange = 0.4f;
void Start()
{
target = MidBlueWaypoints.points[0];
}
void Update()
{
Vector3 dir = target.position - transform.position;
transform.Translate(dir.normalized * speed * Time.deltaTime, Space.World);
if (Vector3.Distance(transform.position, target.position) <= WaypointRange)
{
GetNextWaypoint();
}
}
void GetNextWaypoint()
{
if (wavepointIndex >= MidBlueWaypoints.points.Length - 1)
{
Destroy(gameObject);
return;
}
wavepointIndex++;
target = MidBlueWaypoints.points[wavepointIndex];
}
}
Attacking
public class Turret : MonoBehaviour {
private Transform target;
[Header("Stats")]
public float range = 15f;
public float Turnspeed = 10f;
public float fireRate = 1f;
private float fireCooldown = 0f;
[Header("Debug")]
public string enemyTag = "Enemy";
public Transform PartToRotate;
public GameObject bulletPrefab;
public Transform firepoint;
// Use this for initialization
void Start () {
InvokeRepeating("UpdateTarget", 0f, 0.5f);
}
void UpdateTarget()
{
GameObject[] enemies = GameObject.FindGameObjectsWithTag(enemyTag);
float shortestDistance = Mathf.Infinity;
GameObject nearsetEnemy = null;
foreach(GameObject enemy in enemies)
{
float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position);
if(distanceToEnemy < shortestDistance)
{
shortestDistance = distanceToEnemy;
nearsetEnemy = enemy;
}
}
if(nearsetEnemy != null && shortestDistance <= range)
{
target = nearsetEnemy.transform;
}
else
{
target = null;
}
}
// Update is called once per frame
void Update()
{
if (target == null)
return;
Vector3 dir = target.position - transform.position;
Quaternion lookRotation = Quaternion.LookRotation(dir);
Vector3 rotation = Quaternion.Lerp(PartToRotate.rotation, lookRotation, Time.deltaTime * Turnspeed).eulerAngles;
PartToRotate.rotation = Quaternion.Euler(0f, rotation.y, 0f);
if (fireCooldown <= 0f)
{
Shoot();
fireCooldown = 1f / fireRate;
}
fireCooldown -= Time.deltaTime;
}
void Shoot()
{
//Debug.Log("Shoot");
GameObject bulletGO = (GameObject)Instantiate(bulletPrefab, firepoint.position, firepoint.rotation);
Bullet bullet = bulletGO.GetComponent<Bullet>();
if (bullet != null)
bullet.Seek(target);
}
Comment
Answer by L33T_Rakshasa · Mar 31, 2018 at 07:09 PM
I'm also working on a Moba, what issue are you having? I may need more info to help.