示例#1
0
        private IEnumerator BotBehaviour()
        {
            float timer = 0;

            while (true)
            {
                ImpulseSide side = (transform.position - TargetTransform.position).x < 0
                    ? ImpulseSide.Right
                    : ImpulseSide.Left;

                timer -= Time.deltaTime;

                if (timer <= 0)
                {
                    float distance = Vector3.Distance(transform.position, TargetTransform.position);

                    if (distance > MaxDistance)
                    {
                        if ((TargetTransform.position - transform.position).y > 0)
                        {
                            _unit.Impulse(side);
                        }

                        timer = BotInputCooldown;
                    }
                    else if (distance > MinDistance)
                    {
                        timer = BotSimpleDelay;
                    }
                    else if (distance < MinDistance)
                    {
                        _unit.Impulse(side);
                        timer = BotInputCooldown;
                    }
                }

                yield return(null);
            }
        }
示例#2
0
        public void Impulse(ImpulseSide side)
        {
            _rigidbody.velocity = Vector3.zero;
            Vector3 impulse;

            switch (side)
            {
            case ImpulseSide.Left:
                impulse = new Vector3(-_unitSettingsData.SideOffset, 1).normalized *_unitSettingsData.ImpulseForce;
                break;

            case ImpulseSide.Right:
                impulse = new Vector3(_unitSettingsData.SideOffset, 1).normalized *_unitSettingsData.ImpulseForce;
                break;

            default:
                impulse = Vector3.zero;
                break;
            }

            _rigidbody.AddForce(impulse, ForceMode.Impulse);
        }
示例#3
0
 private void Impulse(ImpulseSide side)
 {
     _unit.Impulse(side);
 }