Пример #1
0
        public void Begin()
        {
            selfController.RoleAnimator.SetInteger("qteState", 1);
            targetController.RoleAnimator.SetTrigger("qte_dog_to_human");

            selfController.IsQte   = true;
            targetController.IsQte = true;

            // 给qte目标设置朝向 add by TangJian 2019/3/20 21:47
            targetController.SetDirectionInt(-selfController.GetDirectionInt());

            LockTarget();

            _qteState = QteState.QteRunning;
        }
Пример #2
0
        public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
        {
            base.OnStateEnter(animator, stateInfo, layerIndex);
            lazyInit(animator);

            float angle = animator.GetFloat("MagicAngle");
//            float angle_z;


//            float x = new Random().Next(-20, 21);
//            System.Random y_y = new System.Random();
//            int y = y_y.Next(-2100, 2100);
//            System.Random z_z = new System.Random();
//            int z = z_z.Next(-2100, 2100);
//            angle =(float) (y*0.01);
//            angle_z = (float) (z*0.01);

            Quaternion quaternion = Quaternion.Euler(0, angle, z: 0);

            var localPosition = quaternion * Vector3.right;

            localPosition.z *= -1;
            localPosition.x *= RoleController.GetDirectionInt();
            RoleController.SetLocalPointPosition(localPosition);
        }
        // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
        override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
        {
            // Debug.Log("HumanMoveByAnimBehaviour OnStateUpdate");
            AnimatorStateInfo nextStateInfo = animator.GetNextAnimatorStateInfo(0);
            bool hasNext = nextStateInfo.fullPathHash != 0;

            var skeletonAnimator   = roleController.SkeletonAnimator;
            var roleAnimController = roleController.RoleAnimController;

            foreach (var bone in skeletonAnimator.skeleton.Bones)
            {
                if (bone.Data.name == "root")
                {
                    Vector3 moveByPos = new Vector3(-bone.X, 0, 0);
                    roleAnimController.transform.localPosition = roleController.GetDirectionInt() > 0 ? moveByPos : -moveByPos;
                    if (hasNext)
                    {
                    }
                    else
                    {
                        var movePosition = new Vector3();
                        if (lastRootPosition == null)
                        {
                            lastRootPosition = moveByPos;
                        }
                        else
                        {
                            movePosition     = moveByPos - lastRootPosition;
                            lastRootPosition = moveByPos;

                            movePosition.x *= -roleController.GetDirectionInt();
                        }

                        Debug.Log("movePosition = " + movePosition);

                        if (movePosition.magnitude > 0.001)
                        {
                            roleController.CharacterController.Move(movePosition);
                        }
                    }
                    break;
                }
            }
        }
Пример #4
0
    // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        base.OnStateEnter(animator, stateInfo, layerIndex);

        if (roleController == null)
        {
            roleController = animator.GetComponentInParent <Tang.RoleController>();
        }

        if (roleController != null)
        {
            if (roleController.GetDirectionInt() > 0)
            {
                roleController.SetDirection(Tang.Direction.Left);
            }
            else
            {
                roleController.SetDirection(Tang.Direction.Right);
            }
        }
    }
Пример #5
0
        public static async void ExecuteRoleAction(RoleController roleController, ActionData actionData)
        {
            if (actionData.chance >= Random.Range(0, 101))
            {
                switch (actionData.type)
                {
                case ActionType.AddAttr:
                {
                    roleController.AddAttr((AttrType)actionData.int1, actionData.float1);
                    // roleController.AddAttr(actionData.string1, actionData.float1);
                }
                break;

                case ActionType.AddAnim:
                {
                    var animGameObject = AnimManager.Instance.PlayAnim(actionData.type + actionData.string1, actionData.string1, actionData.bool1, roleController.CharacterController.bounds.center + new Vector3(0, 0, -0.5f), 1, 1, actionData.float1, roleController.transform);
                }
                break;

                case ActionType.RemoveAnim:
                {
                    AnimManager.Instance.removeAnim(actionData.type + actionData.string1);
                }
                break;

                case ActionType.SetColor:
                    // 变红
                    roleController.SkeletonAnimator.skeleton.DoColorTo(new Color(actionData.float1, actionData.float2, actionData.float3), 0.2f).OnComplete(() =>
                    {
                        roleController.SkeletonAnimator.skeleton.DoColorTo(Color.white, 0.2f);
                    });
                    break;

                case ActionType.CreateDamage:
                    var triggerObject = GameObject.Instantiate(await AssetManager.LoadAssetAsync <GameObject>("Assets/Resources_moved/Prefabs/Trigger/TriggerCube.prefab"));
                    triggerObject.tag   = "Damage";
                    triggerObject.layer = LayerMask.NameToLayer("Interaction");

                    float destroyDelayTime = 0.1f;

                    Tools.RemoveComponent <TriggerController>(triggerObject);
                    var damageController = triggerObject.AddComponent <DamageController>();

                    // 不渲染 add by TangJian 2017/07/07 22:40:39
                    {
                        var meshRenderer = triggerObject.GetComponent <MeshRenderer>();
                        if (DebugManager.Instance.debugData.debug)
                        {
                            meshRenderer.enabled = true;
                            destroyDelayTime     = 1;
                        }
                        else
                        {
                            meshRenderer.enabled = false;
                        }
                    }

                    // 设置大小 add by TangJian 2017/07/07 22:40:40
                    {
                        var boxCollider = triggerObject.GetComponent <BoxCollider>();
                        triggerObject.transform.localScale = new Vector3(actionData.vector3_2.x, actionData.vector3_2.y, actionData.vector3_2.z);
                    }

                    // 设置位置 add by TangJian 2017/07/07 22:34:48
                    {
                        triggerObject.transform.parent = roleController.gameObject.transform.parent;

                        // var a = direction;

                        var x = roleController.gameObject.transform.localPosition.x + actionData.vector3_1.x * roleController.GetDirectionInt();
                        var y = roleController.gameObject.transform.localPosition.y + actionData.vector3_1.y;
                        var z = roleController.gameObject.transform.localPosition.z + actionData.vector3_1.z;

                        triggerObject.transform.localPosition = new Vector3(x, y, z);
                    }

                    var damageData = new DamageData();
                    damageController.damageData = damageData;

                    // 设置持有者 add by TangJian 2017/07/27 20:26:44
                    damageData.teamId           = roleController.RoleData.TeamId;
                    damageData.owner            = roleController.gameObject;
                    damageData.itriggerDelegate = roleController;

                    // 力度 add by TangJian 2017/07/24 15:16:23
                    {
                        damageData.force = new Vector3(roleController.GetDirectionInt() * actionData.vector3_3.x, actionData.vector3_3.y, actionData.vector3_3.z);
                    }

                    // 攻击方向 add by TangJian 2017/07/24 15:17:37
                    {
                        damageData.direction = new Vector3(roleController.GetDirectionInt() * (int)actionData.int2, 0, 0);
                    }

                    // 攻击类别 add by TangJian 2017/07/24 15:17:35
                    {
                        damageData.hitType = (int)actionData.int1;
                    }

                    // 攻击击退 add by TangJian 2017/08/29 22:18:55
                    // {
                    //     damageData.targetMoveBy = new Vector3(roleController.getDirectionInt() * roleAtkFrameEventData.targetMoveBy.x, roleAtkFrameEventData.targetMoveBy.y, roleAtkFrameEventData.targetMoveBy.z);
                    // }

                    // 伤害效果类型 add by TangJian 2017/08/16 15:33:01
                    // {
                    //     var mainHandWeapon = RoleData.EquipData.getMainHand<WeaponData>();
                    //     if (mainHandWeapon != null)
                    //     {
                    //         damageData.damageEffectType = mainHandWeapon.damageEffectType;
                    //     }
                    // }

                    // 攻击力 add by TangJian 2017/07/24 15:17:22
                    // damageData.atk = roleData.Atk * roleAtkFrameEventData.atk;

                    // 暴击 add by TangJian 2017/12/20 21:50:30
                    // if (roleData.FinalCriticalRate >= UnityEngine.Random.Range(0.0f, 1.0f))
                    // {
                    //     //damageData.isCritical = true;
                    //     //damageData.atk *= roleData.CriticalDamage;
                    // }

                    triggerObject.DestoryChildren();
                    Tools.Destroy(triggerObject, destroyDelayTime);
                    break;
                }
            }
        }