Пример #1
0
        /// <summary>
        /// 玩家和怪物开始战斗
        /// </summary>
        public void PlayerAndMonsterStartFight()
        {
            expUICtr.ShowFightPlane();

            // 执行玩家角色战斗前技能回调
            battleMonsterCtr.StartFight(battlePlayerCtr);
            battlePlayerCtr.StartFight(battleMonsterCtr);

            battlePlayerCtr.ExcuteBeforeFightSkillCallBacks(battleMonsterCtr);
            battleMonsterCtr.ExcuteBeforeFightSkillCallBacks(battlePlayerCtr);
        }
        private IEnumerator AdjustAgentsAndCameraAndStartFight()
        {
            yield return(new WaitUntil(() => Time.timeScale == 1));

            yield return(null);

            Vector3 playerOriPos  = battlePlayerCtr.transform.position;
            Vector3 monsterOriPos = battleMonsterCtr.transform.position;

            if (Mathf.RoundToInt(playerOriPos.y) == Mathf.RoundToInt(monsterOriPos.y))
            {
                battlePlayerCtr.transform.position = new Vector3(0.2f * (monsterOriPos.x - playerOriPos.x) + playerOriPos.x,
                                                                 playerOriPos.y, 0);

                if (battlePlayerCtr.towards == MyTowards.Left)
                {
                    battleMonsterCtr.TowardsRight();
                }
                else
                {
                    battleMonsterCtr.TowardsLeft();
                }
            }
            else if (Mathf.RoundToInt(playerOriPos.x) == Mathf.RoundToInt(monsterOriPos.x))
            {
                float newPlayerPosX = playerOriPos.x;
                float newPlayerPosY = playerOriPos.y;

                float newMonsterPosX = monsterOriPos.x;
                float newMonsterPosY = monsterOriPos.y;

                if (playerOriPos.y > monsterOriPos.y && battleMonsterCtr.towards == MyTowards.Right)
                {
                    newPlayerPosX = playerOriPos.x + 0.2f;
                    newPlayerPosY = playerOriPos.y - 1f;
                    battlePlayerCtr.transform.position = new Vector3(newPlayerPosX, newPlayerPosY, 0);
                    battlePlayerCtr.TowardsLeft();

                    newMonsterPosX = monsterOriPos.x - 0.2f;
                    newMonsterPosY = monsterOriPos.y - 0.3f;
                    battleMonsterCtr.transform.position = new Vector3(newMonsterPosX, newMonsterPosY, 0);
                }
                else if (playerOriPos.y > monsterOriPos.y && battleMonsterCtr.towards == MyTowards.Left)
                {
                    newPlayerPosX = playerOriPos.x - 0.2f;
                    newPlayerPosY = playerOriPos.y - 1f;
                    battlePlayerCtr.transform.position = new Vector3(newPlayerPosX, newPlayerPosY, 0);
                    battlePlayerCtr.TowardsRight();

                    newMonsterPosX = monsterOriPos.x + 0.2f;
                    newMonsterPosY = monsterOriPos.y - 0.3f;
                    battleMonsterCtr.transform.position = new Vector3(newMonsterPosX, newMonsterPosY, 0);
                }
                else if (playerOriPos.y < monsterOriPos.y && battleMonsterCtr.towards == MyTowards.Left)
                {
                    newPlayerPosX = playerOriPos.x - 0.2f;
                    newPlayerPosY = playerOriPos.y + 1f;
                    battlePlayerCtr.transform.position = new Vector3(newPlayerPosX, newPlayerPosY, 0);
                    battlePlayerCtr.TowardsRight();

                    newMonsterPosX = monsterOriPos.x + 0.2f;
                    newMonsterPosY = monsterOriPos.y + 0.3f;
                    battleMonsterCtr.transform.position = new Vector3(newMonsterPosX, newMonsterPosY, 0);
                }
                else if (playerOriPos.y < monsterOriPos.y && battleMonsterCtr.towards == MyTowards.Right)
                {
                    newPlayerPosX = playerOriPos.x + 0.2f;
                    newPlayerPosY = playerOriPos.y + 1f;
                    battlePlayerCtr.transform.position = new Vector3(newPlayerPosX, newPlayerPosY, 0);
                    battlePlayerCtr.TowardsLeft();

                    newMonsterPosX = monsterOriPos.x - 0.2f;
                    newMonsterPosY = monsterOriPos.y + 0.3f;
                    battleMonsterCtr.transform.position = new Vector3(newMonsterPosX, newMonsterPosY, 0);
                }
            }

            battlePlayerCtr.InitFightTextDirectionTowards(battleMonsterCtr.transform.position);
            battleMonsterCtr.InitFightTextDirectionTowards(battlePlayerCtr.transform.position);



            Camera c = Camera.main;

            float cameraSizeFixSpeed = 2f;

            float fixDuration = 0.5f;

            float timer = 0;

            while (timer < fixDuration)
            {
                c.orthographicSize -= cameraSizeFixSpeed * Time.deltaTime;

//				c.transform.localPosition -= new Vector3 (0, cameraFixSpeedY * Time.deltaTime, 0);

                timer += Time.deltaTime;

                yield return(null);
            }

            // 执行玩家角色战斗前技能回调
            battlePlayerCtr.ExcuteBeforeFightSkillCallBacks(battleMonsterCtr);

            // 执行怪物角色战斗前技能回调
            battleMonsterCtr.ExcuteBeforeFightSkillCallBacks(battlePlayerCtr);

            battleMonsterCtr.StartFight(battlePlayerCtr);
            battlePlayerCtr.StartFight(battleMonsterCtr);

            expUICtr.ShowFightPlane();
            EnableInteractivity();
        }