public override void OnTriggerEnter2D(Collider2D collision)
    {
        base.OnTriggerEnter2D(collision);
        if (collision.CompareTag("Enemy"))
        {
            Debug.Log(photonView.Owner.ActorNumber);

            // ActorModel.Model.SetEngery(ActorModel.Model.GetCurrentWeapon().回复能量);
            if (photonView.Owner.ActorNumber == collision.GetComponent <NetkActorController>().photonView.Owner.ActorNumber)
            {
                return;
            }


            if (attack_type == HitType.击飞)
            {
                Camera.main.GetComponent <Cinemachine.CinemachineImpulseSource>().GenerateImpulse();
            }
            bool isCrit     = false;
            var  weapon     = WeaponConfig.Get(model.GetPlayerEquipment(EquipmentType.武器));
            var  hurt_value = model.GetPlayerAttribute(PlayerAttribute.攻击力);
            if (Random.value <= model.GetPlayerAttribute(PlayerAttribute.暴击率) * 0.01f)
            {
                isCrit     = true;
                hurt_value = model.GetPlayerAttribute(PlayerAttribute.暴击伤害);
            }

            collision.GetComponent <NetkActorController>().GetHurt(new AttackData(hurt_value, isCrit, transform.position, this.attack_type));
        }
    }
예제 #2
0
    public override void GetHurt(AttackData attackData)
    {
        if (!photonView.IsMine)
        {
            photonView.RPC("RPCGetHurt", RpcTarget.Others, JsonMapper.ToJson(attackData));
        }

        if (shieldEffect.activeSelf && (attackData.attack_pos - transform.position).normalized.x * transform.right.x > 0)
        {
            _rigi.ResetVelocity();
            _rigi.AddForce(-transform.right * 20, ForceMode2D.Impulse);
            GameObjectPoolManager.GetPool("metal_hit").Get(transform.position + transform.right * 2, Quaternion.identity, 1.5f);
            return;
        }

        _anim.SetTrigger("hit");
        GameStaticMethod.ChangeChildrenSpriteRendererColor(gameObject, Color.red);
        transform.rotation = attackData.attack_pos.x > transform.position.x ? Quaternion.identity : Quaternion.Euler(0, 180, 0);
        GameObjectPoolManager.GetPool("hit_effect").Get(transform.position + new Vector3(0, 2, 0), Quaternion.identity, 0.5f);


        _model.SetHealth(-DreamerTool.Util.DreamerUtil.GetHurtValue(attackData.hurt_value, _model.GetPlayerAttribute(PlayerAttribute.物防)));


        switch (attackData.attack_type)
        {
        case HitType.普通:
            break;

        case HitType.击退:
            if (!actor_state.isGround)
            {
                _rigi.ResetVelocity();
                _rigi.ClearGravity();
            }
            else
            {
                _rigi.ResetVelocity();
                _rigi.AddForce(-transform.right * 20, ForceMode2D.Impulse);
            }
            break;

        case HitType.击飞:
            _rigi.ResetVelocity();
            _rigi.AddForce(new Vector2(-transform.right.x * 0.5f, 0.5f).normalized * 50, ForceMode2D.Impulse);
            break;

        case HitType.挑:
            _rigi.ResetVelocity();
            _rigi.AddForce(transform.up * 95, ForceMode2D.Impulse);
            break;

        default:
            break;
        }
    }
예제 #3
0
 public void UpdateEnergy()
 {
     energy_text.text      = (int)model.GetEngery() + "/" + model.GetPlayerAttribute(PlayerAttribute.能量值);
     energy_bar.fillAmount = (float)(model.GetEngery() / model.GetPlayerAttribute(PlayerAttribute.能量值));
 }