Hi
I am writing enemy AI script for my 2d tank game. Some one can tell me how can I write script for my enemy tank to aim and shoot player?
I want enemy tank turret >> transform >> rotation.Z be change for aim.
when player move in enemy distance action enemy turret rotation.z change to aim and shoot player
blue tank is player.
it is my code for enemy tank:
public class Enemy : MonoBehaviour
{
[SerializeField]
private GameObject _target;
[SerializeField]
private GameObject _firePoint;
[SerializeField]
private GameObject _bulletPrefab;
private GameObject _newBullet;
[SerializeField]
private Transform _turretTransform;
[SerializeField]
private float _speedBullet = 12f;
[SerializeField]
private float _aimSpeed = 12f;
[SerializeField]
private float _combatDistance = 10f;
[SerializeField]
private float _fireRate = 1f;
[SerializeField]
private float _targetDistance;
private float _nextFire = 0f;
private Rigidbody2D _rb2dBullet;
private bool _isBulletActiv = false;
[HideInInspector]
public Vector2 force;
private void FixedUpdate()
{
PrepareForShoot();
if (_newBullet == null)
{
InstanceBullet();
DeactiveRigid();
}
force = -_firePoint.transform.right * _speedBullet;
if (_isBulletActiv == true)
{
BulletTrueRotation();
}
}
private void PrepareForShoot()
{
if (_target != null)
{
_targetDistance = Vector3.Distance(_target.transform.position, transform.position);
if (_targetDistance < _combatDistance)
{
Shoot();
}
}
}
private void Shoot()
{
if (_isBulletActiv == false && Time.time > _nextFire)
{
_nextFire = Time.time + _fireRate;
_isBulletActiv = true;
_rb2dBullet.isKinematic = false;
_rb2dBullet.velocity = force;
}
}
private void InstanceBullet()
{
_newBullet = Instantiate(_bulletPrefab, _firePoint.transform.position, _firePoint.transform.rotation, _firePoint.transform);
_rb2dBullet = _newBullet.GetComponent<Rigidbody2D>();
}
private void DeactiveRigid()
{
_isBulletActiv = false;
_rb2dBullet.velocity = Vector3.zero;
_rb2dBullet.angularVelocity = 0f;
_rb2dBullet.isKinematic = true;
}
private void BulletTrueRotation()
{
float truelook = Mathf.Atan2(-_rb2dBullet.velocity.y, -_rb2dBullet.velocity.x) * Mathf.Rad2Deg;
_newBullet.transform.rotation = Quaternion.AngleAxis(truelook, Vector3.forward);
}
}