public void Knockback() { Collider.enabled = false; transform.Translate(knockbackData.Force * Time.deltaTime); knockbackData.Distance -= knockbackData.Force.magnitude * Time.deltaTime; if (knockbackData.Distance < 0) { Collider.enabled = true; knockbackData = null; } }
// Start is called before the first frame update void Start() { knockbackData = FindObjectOfType <KnockbackData>(); knockbackData.RegisterObserver(this); //Initialize reference to Percent Tracker //PercentTracker = GameObject.FindGameObjectWithTag("PercentTracker"); percentGauge = GameObject.FindObjectOfType <PercentGauge>(); //personalCollider = GetComponent<SphereCollider>(); //Debug.Log(Angle_Right + " " + Multiplier_RL + " " + Angle_Upwards + " " + Multiplier_UD + " " + Angle_Forwards + " " + Multiplier_FB); knockback_Angle = new Vector3(Angle_Right * Multiplier_RL, Angle_Upwards * Multiplier_UD, Angle_Forwards * Multiplier_FB); }
public void Knockback(Vector3 direction, KnockbackData data) { direction.y = 0f; _initKnockbackPosition = transform.position; _finalKnockbackPosition = _initKnockbackPosition + direction * data.distance; _currentKnockbackDuration = data.duration; _knockbackTime = Time.time; _knockbackBuffered = true; _forcesEnabled = false; Stop(); //_rb.AddForce(force, ForceMode.Impulse); //gameObject.SetActive(false); }
protected void FixedUpdate() { if (Target == null) { SetTarget(); } if (Target.transform.position.magnitude > 8) { knockbackData = null; } if (knockbackData != null) { Knockback(); return; } Vector3 Distance = Target.transform.position - transform.position; if (Distance.magnitude > Range) { if (IsAttacking) { StopCoroutine(Attack()); IsAttacking = false; } Vector3 Displacement = Distance.normalized * Speed * SpeedMultiplier * Time.fixedDeltaTime; transform.Translate(Displacement, Space.World); } else { if (!IsAttacking) { StartCoroutine(Attack()); IsAttacking = true; } } }
void Explode() { List <Enemy> Enemies = Manager.Instance.Enemies; for (int i = 0; i < Enemies.Count; i++) { Enemy NearUnit = Enemies[i]; Vector3 Direction = NearUnit.transform.position - transform.position; if (Direction.magnitude < KnockbackRadius) { KnockbackData knockbackData = new KnockbackData(); knockbackData.Force = Direction.normalized * KnockbackForce; knockbackData.Distance = KnockbackDistance; NearUnit.knockbackData = knockbackData; } } if (Explosion) { Instantiate(Explosion, transform.position, Quaternion.identity, transform.parent); } Destroy(gameObject); }