void Update() { _age += Time.deltaTime; if (_age > MissileLifeTime) { Destroy(gameObject); } var collider = GetComponent <CapsuleCollider>(); if (_age > .5f && !collider.enabled) { collider.enabled = true; } var projectileSpeed = (5 / ((float)Math.Round(Time.time - _age, 2)) + 50); switch (_missleType) { case MissleType.Homing: { if (_age > .75f && _target != null) { var direction = _target.transform.position - transform.position; var rotation = Quaternion.LookRotation(direction); transform.rotation = Quaternion.Slerp(transform.rotation, rotation, RotationRate); } break; } case MissleType.Smart: { if (_age > .75f && _target != null) { var targetRigidBody = _target.GetComponent <Rigidbody>(); var targetAimPoint = PredictiveAiming.FirstOrderIntercept(transform.position, Vector3.zero, projectileSpeed, _target.transform.position, targetRigidBody.velocity); var direction = targetAimPoint - transform.position; var rotation = Quaternion.LookRotation(direction); transform.rotation = Quaternion.Slerp(transform.rotation, rotation, RotationRate); } break; } } }
void Update() { if (tag == "Untagged") { var players = new List <GameObject>(); _factions.ForEach(x => players.AddRange(GameObject.FindGameObjectsWithTag(x))); var collector = players.FirstOrDefault(x => Vector3.Distance(x.transform.position, transform.position) < 5); if (collector != null) { tag = collector.tag; GetComponent <Renderer>().material.color = Faction.Colour(tag); AquireTarget(); } } else if (Target != null) { // F = m * (s/t), where "m" is the mass of the object, "s" is the desired speed and t = Time.fixedDeltaTime. var shotMass = 1f; float projectileSpeed = (ShotForce / shotMass) * Time.fixedDeltaTime; var interceptPoint = PredictiveAiming.FirstOrderIntercept(transform.position, Vector3.zero, projectileSpeed, Target.transform.position, _targetRigidBody.velocity); var direction = interceptPoint - transform.position; var rotation = Quaternion.LookRotation(direction); transform.rotation = Quaternion.Lerp(transform.rotation, rotation, RotationRate); var distanceToTarget = Vector3.Distance(Target.transform.position, transform.position); if (distanceToTarget < 15) { FireCannon(); } } else { AquireTarget(); } }