下面展示一些 MMORPG类游戏引导系统逻辑代码

using LitJson;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 class GuideController : MonoBehaviour{public static GuideController instance;public List<GameObject> tapTipList;public List<GameObject> Guides;//引导窗口public List<GameObject> tapTips;//点击提示窗口public List<GameObject> playSkillTips;//技巧提示[HideInInspector]public GameObject swapTip;//判断Unity端引导过程是否结束[HideInInspector]public bool inGuide;[HideInInspector]public int nextStep;/// <summary>/// 玩家当前引导步数/// </summary>[HideInInspector]public int StepSign = 0;[HideInInspector]//引导是否没有public bool fromBegin;[HideInInspector]/// <summary>/// 用于判断是否第一次触发了吃饼干,只用一次/// </summary>public bool afterFood;[HideInInspector]/// <summary>/// 用于判断是否第一次触发了zombi死亡,只用一次/// </summary>public bool zombi;[HideInInspector]/// <summary>/// 用于判断是否第一次触发了mummy死亡/// </summary>public bool mummy;MainView mainView;[HideInInspector]/// <summary>/// 用于存储引导键值对/// </summary>public Dictionary<string, string> guideDic = new Dictionary<string, string>();public IEnumerator stopGuide2;void Awake(){instance = this;mainView = MainView.instance;stopGuide2 = null;foreach (GameObject temp in Guides){temp.SetActive(false);}}//temp Before blackDragon enter.public void ShowBlackDragonGuide(){KnapsackView kView = KnapsackView.instance;MainView mView = MainView.instance;//先让蒙版遮住所有,获取物品的面板消失kView.settleMentPop.SetActive(false);mView.guideMask.SetActive(true);mView.guideMask.transform.SetAsLastSibling();mView.blackDragonTip.transform.SetAsLastSibling();kView.closeButton.interactable = false;if (kView.inventoryPopup.closeButton)kView.inventoryPopup.closeButton.interactable = false;foreach (GameObject item in tapTipList){item.SetActive(false);}mView.blackDragonTip.SetActive(true);//游戏暂停//Time.timeScale = 0;}public IEnumerator ShowRedDragonGuide(){KnapsackView kView = KnapsackView.instance;MainView mView = MainView.instance;yield return new WaitForSeconds(2);//先让蒙版遮住所有,获取物品的面板消失kView.settleMentPop.SetActive(false);mView.guideMask.SetActive(true);mView.guideMask.transform.SetAsLastSibling();mView.redDragonTip.transform.SetAsLastSibling();kView.closeButton.interactable = false;if (kView.inventoryPopup.closeButton)kView.inventoryPopup.closeButton.interactable = false;foreach (GameObject item in tapTipList){item.SetActive(false);}mView.redDragonTip.SetActive(true);//游戏暂停//Time.timeScale = 0;}/// <summary>/// 常规引导流程,常规引导操作/// </summary>void GuidePrepare(){KnapsackView kView = KnapsackView.instance;MainView mView = MainView.instance;//先让蒙版遮住所有,获取物品的面板消失kView.settleMentPop.SetActive(false);mView.guideMask.SetActive(true);mView.guideMask.transform.SetAsLastSibling();kView.closeButton.interactable = false;if (kView.inventoryPopup.closeButton)kView.inventoryPopup.closeButton.interactable = false;foreach (GameObject item in tapTipList){item.SetActive(false);}//tapTipList[nextStep - 1].SetActive(true);//Operations.GuideStepUpdate(PlayerController.instance.PlayerMe.UserId, nextStep + 1);//游戏暂停//Time.timeScale = 0;}//public void UpdateStepRequest()//{//    Operations.GuideStepUpdate(PlayerController.instance.PlayerMe.UserId, nextStep + 1);//}//喂食引导,挂在按钮上调用public void ObjectGuideOn(){MainView mView = MainView.instance;//KnapsackView kView = KnapsackView.instance;mView.objectPanel.SetActive(true);//激活华夫饼跳动//kView.objectItUI.GetComponentInChildren<ObjectButton>().objectImgAnim.enabled = true;GuidePrepare();mView.objectPanel.transform.SetParent(mView.knapsackCanvas.transform);mView.objectPanel.transform.SetAsLastSibling();//出小手ShowGuideSolo(6);}public void ObjectGuideOff(){MainView mainView = MainView.instance;mainView.objectPanel.transform.SetParent(mainView.bottomButtonGroup.transform);mainView.objectPanel.transform.SetSiblingIndex(1);AfterGuide();}public void DelayPet1GuideOn(float time, int step){//if (delayPet1Guide_cor == null)//{delayPet1Guide_cor = DelayPet1GuideOnCor(time, step);//}StartCoroutine(delayPet1Guide_cor);}public void DelayPet1GuideOff(){if (delayPet1Guide_cor != null)StopCoroutine(delayPet1Guide_cor);}IEnumerator delayPet1Guide_cor;//等两秒,跳过物品展示框后,出现召唤怪物引导IEnumerator DelayPet1GuideOnCor(float time, int step){yield return new WaitForSeconds(time);KnapsackView kView = KnapsackView.instance;//如果按钮上有东西或者是需要切换宠物,才能触发引导if (kView.pet1ItUI.inventoryItem != null || step == 8){//Debug.LogError(222);Pet1GuideOn(step);}}public void Pet1GuideOn(int step){MainView mView = MainView.instance;GuidePrepare();mView.pet1Panel.transform.SetParent(mView.knapsackCanvas.transform);mView.pet1Panel.transform.SetAsLastSibling();//出小手ShowGuideSolo(step);}public void Pet1GuideOff(){MainView mainView = MainView.instance;mainView.pet1Panel.transform.SetParent(mainView.bottomButtonGroup.transform);mainView.pet1Panel.transform.SetSiblingIndex(1);AfterGuide();}public void SkillGuideOn(){MainView mView = MainView.instance;mView.clickSkillPanel.SetActive(true);//GuidePrepare();//mView.clickSkillPanel.transform.SetParent(mView.mainCanvas.transform);//mView.clickSkillPanel.transform.SetAsLastSibling();//引导中才可以跳动//if (inGuide)//{//    mView.clickSkillPanel.GetComponentInChildren<SkillButton>().skillImageAnim.enabled = true;//}}public void SkillGuideOff(){//MainView mainView = MainView.instance;//mainView.clickSkillPanel.transform.SetParent(mainView.bottomButtonGroup.transform);//mainView.clickSkillPanel.transform.SetSiblingIndex(1);//AfterGuide();}/// <summary>/// 辅助的单独的引导,往往是再次提醒和引导,只需出现三次,不会暂停游戏/// </summary>void ShowGuideSolo(int step){//Debug.LogError(111);tapTipList[step - 1].SetActive(true);}public void ShowGuide(int step){tapTipList[step - 1].SetActive(true);}/// <summary>/// 引导步骤大于7的话,就结束Unity端的引导喽/// </summary>/// <param name="newStep"></param>/// <param name="onGet"> 是get到的step还是更新的step</param>public void GuideStepChange(int newStep, bool onGet){nextStep = newStep;Debug.LogError("nextStep:  " + nextStep);//3D端引导完,nextStep值为7if (nextStep > 1){inGuide = false;BattleController.instance.CountDown();//不能在这里将InGuide设为0,因为这个时候不一定打完引导中的怪}else{inGuide = true;}//if (onGet)//{//    //如果大招引导没执行,还是要先召唤宠物//    if (nextStep == 4)//    {//        DelayGuide4();//    }//    //回退一步//    else if (nextStep == 5)//    {//        nextStep = 4;//        DelayGuide4();//    }//    return;//}避免背包过早打开,误触发引导//if (nextStep == 1)//{//    MainView.instance.backPack.SetActive(false);//}提示选择宠物蛋//else if (nextStep == 2)//{//    ShowGuide(2);//}//else if (nextStep == 3)//{//    ShowGuide(3);//}//else if (nextStep == 4)//{//    DisableGuide();//}//else if (nextStep == 5)//{//    DisableGuide();//}//else if (nextStep == 6)//{//    DisableGuide();//}//else if (nextStep == 7)//{//    DisableGuide();//}}public void AfterGuide(){MainView mView = MainView.instance;KnapsackView kView = KnapsackView.instance;Time.timeScale = 1;mView.guideMask.SetActive(false);kView.closeButton.interactable = true;if (kView.inventoryPopup.closeButton)kView.inventoryPopup.closeButton.interactable = true;foreach (GameObject item in tapTipList)item.SetActive(false);}/// <summary>/// 打开引导弹窗/// </summary>/// <param name="step"> 步骤</param>public void StepControl(int step,float time) {PlayerController playerCon = PlayerController.instance;Debug.Log("StepSign:" + StepSign + "    参数step :" + step);if (step > StepSign){StepSign++;if (step >= 4) {StepSign = step;}foreach (GameObject temp in Guides){if (temp != null)temp.SetActive(false);}step -= 1;//数组里是从0开始的//if (StepSign == 3)//{//    mainView.Guides[2].SetActive(true);//    stopGuide2 = StopGuide(5);//    StartCoroutine(stopGuide2);//}if (StepSign != 6 && Guides[step] != null) {Guides[step].SetActive(true);}// StepSign == 6 则引导结束if (playerCon.PlayerMe != null) {string val = "";if (guideDic.TryGetValue("BattleStep", out val)){guideDic["BattleStep"] = StepSign.ToString();}else{//不存在,则添加guideDic.Add("BattleStep", StepSign.ToString());}Operations.GuideStepUpdate(playerCon.PlayerMe.UserId, JsonMapper.ToJson(guideDic));}if (time > 0) {StartCoroutine(StopGuide(time));}}Debug.LogError("StepSign : " + StepSign);}public void CloseGuide() {foreach (GameObject temp in Guides){if (temp != null)temp.SetActive(false);}foreach (GameObject temp in tapTips){if (temp != null)temp.SetActive(false);}}IEnumerator StopGuide(float time) {yield return new WaitForSeconds(time);foreach (GameObject temp in Guides){if (temp != null)temp.SetActive(false);}foreach (GameObject temp in tapTips){if (temp != null)temp.SetActive(false);}}public void OpenTipsPanel(int index, float time) {for(int i = 0;i< tapTips.Count;i++){if (tapTips[i] != null) {if(i == index)tapTips[i].SetActive(true);elsetapTips[i].SetActive(false);}}if (time > 0){StartCoroutine(StopGuide(time));}}public void OpenTipsPanel(int index, float time,string texts){foreach (GameObject temp in tapTips){if (temp != null)temp.SetActive(false);}if (tapTips[index] != null) {if (texts != null){tapTips[index].transform.Find("Text").GetComponent<Text>().text = texts;}tapTips[index].SetActive(true);}if (time > 0){StartCoroutine(StopGuide(time));}}public void GetPlayerGuide() {UnityPhotonClient unityPhotonClient = UnityPhotonClient.Instance;//Debug.Log("player.UserId :" + unityPhotonClient.player.UserId);//如果是注册,第一次登录if (unityPhotonClient.player.Registered){Debug.Log("第一次注册,发送引导请求");//Operations.GuideStepUpdate(player.UserId, 1);//------------------------------clOperations.GetGuideStep(unityPhotonClient.player.UserId);//------------------------------cl}//以后登录else{//获取玩家引导步数,方便判断是否需要引导Operations.GetGuideStep(unityPhotonClient.player.UserId);//------------------------------clDebug.Log("战斗前先获取引导Guide :" + StepSign);//if (guideCon.StepSign == 0) {//}}}}

效果如下图:

Unity开发 MMORPG类游戏引导系统相关推荐

  1. unity3d开发传奇类游戏3D

    传奇开发类游戏开发精讲 先上效果 技能治疗 技能伤害 近战 地图数据: vector2 数组.N行N列,描述地图大小.通过数据结构算法得出每个单元格的坐标 [x,y][x,y][x,y] [x,y][ ...

  2. MMORPG类游戏制作思路分享(Unity3D+PhotonServer)

    核心问题 如何实现所有客户端玩家信息同步(如位置信息)? 同步模式一般分两种:状态同步和帧同步.而本文主要针对MMO类游戏,所以建议用状态同步. 状态发生后,客户端上传操作到服务器,服务器收到后处理行 ...

  3. unity开发微信小游戏(5)- 微信好友排行榜

    效果展示: 如果感觉文章有用的,也烦请大家多多支持(扫描上面二维码n(*≧▽≦*)n)!!❤❤❤ unity开发微信好友排行榜可以说是把我虐的体无完肤,但为了拿下这功能,硬壳了三天,把我所踩过的坑分享 ...

  4. Unity 开发微信小游戏初探

    前言 最近因项目需要开始研究Unity开发微信小游戏相关的知识.期间遇到各种坑,网上查阅的资料基本类似,无法解决自己遇到的问题.特用本文记录下过程,方便其他人遇到同样的问题时能够参考. 开发环境 Un ...

  5. Unity开发微信小游戏步骤

    unity开发微信小游戏 https://gitcode.net/mirrors/wechat-miniprogram/minigame-unity-webgl-transform?utm_sourc ...

  6. unity开发入门_Unity游戏开发终极入门指南

    unity开发入门 Unity is a great tool for prototyping everything from games, to interactive visualisations ...

  7. 【Unity】 节奏类游戏的表盘卡点功能

    目录 1:前言 2:开始  ---(方案一根据音频数据自动生成节奏点) 2.1:功能实现选择---音频可视化 2.2:结论-(结果不准确) 3:游戏表盘的实现----(方案二自给自足,自动输入用时自动 ...

  8. UE4开发神秘海域类游戏原型 初阶(二):动画资源的整合

    前一篇已经确定神海类游戏原型的目标,首先要做的就是3C's(Character, Controls, Camera)的开发. UE4的3C's的程序部分开发主要也就是基于他的GamePlay Fram ...

  9. Unity—2D跑酷类游戏(一)

    实现思路 2D跑酷类游戏是模拟3D场景的效果的一个过程,主要就是怎么样通过一些2D图片来呈现3D游戏的效果.在这里我主要总结了三点. 在3D场景中随着障碍物的移动,其相应的坐标和大小也会发生变化. 让 ...

  10. Cocos2d-X3.4开发三消类游戏(1)--准备工作及开始界面的制作

    本文参考LT大树_的博客文章<cocos2d-x 3.2 之 三消类游戏>素材也是使用的LT大树_提供的,我只增加了四个按钮的图片.如有您感觉这篇文章侵犯了您的权益,请联系我,我将马上删除 ...

最新文章

  1. 关于git bush 中不能复制黏贴的问题
  2. 让织梦CMS的后台编辑器支持优酷视频
  3. Tornado框架中视图模板Template的使用
  4. np.zeros(),np.empty()
  5. u检验、t检验、F检验、X2检验 (转)
  6. css摇曳的_HTML5+CSS3实现树被风吹动摇晃
  7. golang 大数据平台_大数据平台是什么?有哪些功能?如何搭建大数据平台?
  8. Python 学习过程问题记录
  9. 信捷plc485通信上位机_常用通信接口汇总
  10. 趣味程序设计_打印日历
  11. css设置ios 默认字体,让iOS在CSS中选择系统字体Helvetica Neue或旧金山
  12. RxBus的使用及解析
  13. matlab加速度转化为位移,加速度转换成位移的matlab代码及说明
  14. AutoCAD Civil 3D贴图
  15. or计算遇到存在零“0”的情况
  16. PBX220评测报告
  17. ubuntu android编译和开发环境配置记录
  18. 元宇宙核心技术:概述——未来已来
  19. java数字猜大小游戏_java实现猜数字小游戏
  20. python Numpy 生成一个随机矩阵(整数型)

热门文章

  1. Excel VBA入门(6) - Worksheet对象常用方法事件
  2. O2O商城网站建设方案
  3. OpenHarmony轻量系统开发【8】其它驱动开发示例
  4. 【jQwidgets】千分位
  5. ultravnc,4款不能错过的ultravnc汉化版
  6. android inflate 方法,Android LayoutInflater中 Inflate()方法应用
  7. 微信/钉钉电脑端登录后手机端不再提醒
  8. recyclerview 动态设置高度_RecyclerView 动态调整高度, 调整item高度
  9. 科技开发规划VBS屌丝暗色调
  10. 电平转换电路的分析-MOS管、三极管