public void Shoot()
    {
        cosestTarget = FindClosestTarget();

        if (cosestTarget != null && Vector3.Distance(cosestTarget.transform.position, transform.position) <= range)
        {
            animator.SetTrigger("Attack");
            transform.LookAt(cosestTarget.transform.position, Vector3.up);
        }
    }
예제 #2
0
    private void OnTriggerEnter(Collider other)
    {
        AvatarWeaponTarget avatarWeaponTarget = other.GetComponent <AvatarWeaponTarget>();

        if (avatarWeaponTarget != null)
        {
            avatarWeaponTarget.ReceiveImpact(this);
        }

        Destroy(gameObject);
    }
    AvatarWeaponTarget FindClosestTarget()
    {
        AvatarWeaponTarget closestTarget = null;
        float closestTargetSqrDist       = -1f;

        foreach (var t in AvatarWeaponTarget.availableTargets)
        {
            if (closestTarget == null || Vector3.SqrMagnitude(transform.position - t.transform.position) < closestTargetSqrDist)
            {
                closestTargetSqrDist = Vector3.SqrMagnitude(transform.position - t.transform.position);
                closestTarget        = t;
            }
        }
        return(closestTarget);
    }
    //llamado desde animacion
    public void SpawnBullet()
    {
        if (cosestTarget == null)
        {
            return;
        }


        AvatarBullet newBullet = Instantiate <AvatarBullet>(bulletPrefab);

        newBullet.transform.position = (bulletOrigin != null) ? bulletOrigin.position : transform.position;

        Vector3 targetPos = new Vector3(
            cosestTarget.transform.position.x,
            newBullet.transform.position.y,
            cosestTarget.transform.position.z);

        newBullet.transform.LookAt(targetPos, Vector3.up);

        Debug.DrawLine(transform.position, cosestTarget.transform.position, Color.red, 0.1f);

        cosestTarget = null;
    }