Simply I want the tank to fire shells at the player and explode on impact even if it misses it should still impact like real life.
So, the current code i have is
Chase Script.js:
var target : Transform; //cant’tbebotheredtodoany commments
var moveSpeed = 3;
var rotationSpeed = 3;
var range : float=10f;
var range2 : float=10f;
var stop : float=0;
var myTransform : Transform;
function Awake()
{
myTransform = transform;
}
function Start()
{
target = GameObject.FindWithTag(“Player”).transform;
}
function Update () {
GetComponent(NavMeshAgent).destination = target.position;
//rotatetolookatthe player
var distance = Vector3.Distance(myTransform.position, target.position);
if (distance<=range2 && distance>=range){
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
}
elseif(distance<=range && distance>stop){
//movetowardsthe player
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
Quaternion.LookRotation(target.position - myTransform.position), rotationSpeedTime.deltaTime);
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
}
elseif (distance<=stop) {
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
Quaternion.LookRotation(target.position - myTransform.position), rotationSpeedTime.deltaTime);
}
}
Turret.cs:
using UnityEngine;
using System.Collections;
publicclassTurret:MonoBehaviour{
Transformtarget;
[Header (“Attributes”)]
floatrotationSpeed=3;
floatrange=10f;
floatrange2=10f;
publicfloatfireRate=1f;
privatefloatfireCountdown=0f;
[Header(“UnitySetupFields”)]
TransformmyTransform;
floatstop=0;
publicGameObjectShellPrefab;
publicTransformfirePoint;
voidAwake()
{
myTransform=transform;
}
voidStart()
{
target=GameObject.FindWithTag(“Player”).transform;
}
voidUpdate()
{
if(fireCountdown<=0)
{
Shoot();
fireCountdown=1f/fireRate;
}
fireCountdown-=Time.deltaTime;
//rotatetolookatthe player
vardistance=Vector2.Distance(myTransform.position,target.position);
if(distance<=range2&&distance>=range)
{
myTransform.rotation=Quaternion.Slerp(myTransform.rotation,
Quaternion.LookRotation(target.position-myTransform.position),rotationSpeed*Time.deltaTime);
}
elseif(distance<=range&&distance>stop)
{
//movetowardsthe player
myTransform.rotation=Quaternion.Slerp(myTransform.rotation,
Quaternion.LookRotation(target.position-myTransform.position),rotationSpeedTime.deltaTime);
}
elseif(distance<=stop)
{
myTransform.rotation=Quaternion.Slerp(myTransform.rotation,
Quaternion.LookRotation(target.position-myTransform.position),rotationSpeedTime.deltaTime);
}
}
voidShoot()
{
GameObjectshellGO=(GameObject)Instantiate(ShellPrefab,firePoint.position,firePoint.rotation);
ShellShell=shellGO.GetComponent();
if(Shell !=null)
Shell.Seek(target);
}
}
ShellExplosion:
using UnityEngine;
using System.Collections;
publicclassShellExplosion:MonoBehaviour{
publicLayerMaskm_PlayerMask;
publicfloatm_MaxDamage=100f;
publicfloatm_ExplosionForce=1000f;
publicfloatm_MaxLifeTime=2f;
publicfloatm_ExplosionRadius=5f;
privateTransformtarget;
publicvoidSeek(Transform_target)
{
target=_target;
}
privatevoidStart()
{
Destroy(gameObject,m_MaxLifeTime);
}
privatevoidOnTriggerEnter(Colliderother)
{
Collider[ ]colliders=Physics.OverlapSphere(transform.position,m_ExplosionRadius,m_PlayerMask);
for(inti=0;i<colliders.Length;i++)
{
RigidbodytargetRigidbody=colliders*.GetComponent();*
if(!targetRigidbody)
continue;
targetRigidbody.AddExplosionForce(m_ExplosionForce,transform.position,m_ExplosionRadius);
HealthBartargetHealth=targetRigidbody.GetComponent();
if(!targetHealth)
continue;
floatdamage=CalculateDamage(targetRigidbody.position);
targetHealth.TakeDamage(damage);
}
}
privatefloatCalculateDamage(Vector3targetPosition)
{
return0f;
}
}