Пример #1
0
 /// <summary>
 /// 显示斩击评价
 /// </summary>
 /// <param name="evaluation">斩击评估</param>
 public void DrawEvaluation(_GameControl.EVALUATION evaluation)
 {
     if (evaluation == _GameControl.EVALUATION.GREAT)
     {
         evaluationImage.sprite = greatSprite;
     }
     else
     {
         evaluationImage.sprite = okaySprite;
     }
     evaluationImage.color = Color.white;
     evaluationTimer       = evaluationDampTime;
 }
Пример #2
0
    /// <summary>
    /// 被击中
    /// </summary>
    /// <param name="evaluation">击飞程度</param>
    public void OnAttackedFromPlayer(_GameControl.EVALUATION evaluation)
    {
        isAlive = false;
        state   = STATE.DEFEATED;
        GetComponent <BoxCollider>().enabled = false;
        _PlayerControl playerControl = Player.GetComponent <_PlayerControl>();

        runSpeed = playerControl.runSpeed;  // 固定编队在屏幕的位置

        // 设置击飞速度,以圆锥型状发散发射出去
        float groupSpeed = 0.0f;    // 整体速度
        float groupAngle = 0.0f;    // 整体发射角度
        float randSpeed  = 0.0f;    // 散开速度
        float randAngle  = 0.0f;    // 散开角度

        if (evaluation == _GameControl.EVALUATION.OKAY)
        {
            groupSpeed = 10.0f;
            groupAngle = 20.0f;
            randSpeed  = 2.0f;
        }
        else if (evaluation == _GameControl.EVALUATION.GOOD)
        {
            groupSpeed = 10.0f;
            groupAngle = -20.0f;
            randSpeed  = 3.0f;
        }
        else if (evaluation == _GameControl.EVALUATION.GREAT)
        {
            groupSpeed = 15.0f;
            groupAngle = -40.0f;
            randSpeed  = 4.0f;
        }
        groupSpeed *= Random.Range(0.8f, 1.2f);
        for (int i = 0; i < Onis.Length; i++)
        {
            Vector3 speed = Vector3.forward * randSpeed;
            randAngle = Random.Range(0.0f, 360.0f);
            speed     = Quaternion.AngleAxis(randAngle, Vector3.up) * speed;
            speed    += groupSpeed * Vector3.up;
            speed     = Quaternion.AngleAxis(groupAngle, Vector3.forward) * speed;
            Onis[i].OnAttack(speed);
        }
    }
Пример #3
0
    private void OnTriggerStay(Collider other)
    {
        if (!isAttacking)
        {
            return;
        }

        if (other.gameObject.tag == "OniGroup")
        {
            _OniGroupControl oniGroup = other.GetComponent <_OniGroupControl>();
            if (oniGroup.isAlive)
            {
                float attackTime = Player.GetComponent <_PlayerControl>().GetAttackTimer();          //  攻击时机
                int   count      = oniGroup.GetCount();                                              // 怪物数量
                _GameControl.EVALUATION evaluation = gameControl.Scored(count, attackTime);          // 评估得分
                Player.GetComponent <_PlayerControl>().AttackTheTarget(oniGroup.transform.position); // 角色击中目标
                oniGroup.OnAttackedFromPlayer(evaluation);                                           // 怪物被击飞
            }
        }
    }