Unity开发 MMORPG类游戏引导系统
下面展示一些 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类游戏引导系统相关推荐
- unity3d开发传奇类游戏3D
传奇开发类游戏开发精讲 先上效果 技能治疗 技能伤害 近战 地图数据: vector2 数组.N行N列,描述地图大小.通过数据结构算法得出每个单元格的坐标 [x,y][x,y][x,y] [x,y][ ...
- MMORPG类游戏制作思路分享(Unity3D+PhotonServer)
核心问题 如何实现所有客户端玩家信息同步(如位置信息)? 同步模式一般分两种:状态同步和帧同步.而本文主要针对MMO类游戏,所以建议用状态同步. 状态发生后,客户端上传操作到服务器,服务器收到后处理行 ...
- unity开发微信小游戏(5)- 微信好友排行榜
效果展示: 如果感觉文章有用的,也烦请大家多多支持(扫描上面二维码n(*≧▽≦*)n)!!❤❤❤ unity开发微信好友排行榜可以说是把我虐的体无完肤,但为了拿下这功能,硬壳了三天,把我所踩过的坑分享 ...
- Unity 开发微信小游戏初探
前言 最近因项目需要开始研究Unity开发微信小游戏相关的知识.期间遇到各种坑,网上查阅的资料基本类似,无法解决自己遇到的问题.特用本文记录下过程,方便其他人遇到同样的问题时能够参考. 开发环境 Un ...
- Unity开发微信小游戏步骤
unity开发微信小游戏 https://gitcode.net/mirrors/wechat-miniprogram/minigame-unity-webgl-transform?utm_sourc ...
- unity开发入门_Unity游戏开发终极入门指南
unity开发入门 Unity is a great tool for prototyping everything from games, to interactive visualisations ...
- 【Unity】 节奏类游戏的表盘卡点功能
目录 1:前言 2:开始 ---(方案一根据音频数据自动生成节奏点) 2.1:功能实现选择---音频可视化 2.2:结论-(结果不准确) 3:游戏表盘的实现----(方案二自给自足,自动输入用时自动 ...
- UE4开发神秘海域类游戏原型 初阶(二):动画资源的整合
前一篇已经确定神海类游戏原型的目标,首先要做的就是3C's(Character, Controls, Camera)的开发. UE4的3C's的程序部分开发主要也就是基于他的GamePlay Fram ...
- Unity—2D跑酷类游戏(一)
实现思路 2D跑酷类游戏是模拟3D场景的效果的一个过程,主要就是怎么样通过一些2D图片来呈现3D游戏的效果.在这里我主要总结了三点. 在3D场景中随着障碍物的移动,其相应的坐标和大小也会发生变化. 让 ...
- Cocos2d-X3.4开发三消类游戏(1)--准备工作及开始界面的制作
本文参考LT大树_的博客文章<cocos2d-x 3.2 之 三消类游戏>素材也是使用的LT大树_提供的,我只增加了四个按钮的图片.如有您感觉这篇文章侵犯了您的权益,请联系我,我将马上删除 ...
最新文章
- 关于git bush 中不能复制黏贴的问题
- 让织梦CMS的后台编辑器支持优酷视频
- Tornado框架中视图模板Template的使用
- np.zeros(),np.empty()
- u检验、t检验、F检验、X2检验 (转)
- css摇曳的_HTML5+CSS3实现树被风吹动摇晃
- golang 大数据平台_大数据平台是什么?有哪些功能?如何搭建大数据平台?
- Python 学习过程问题记录
- 信捷plc485通信上位机_常用通信接口汇总
- 趣味程序设计_打印日历
- css设置ios 默认字体,让iOS在CSS中选择系统字体Helvetica Neue或旧金山
- RxBus的使用及解析
- matlab加速度转化为位移,加速度转换成位移的matlab代码及说明
- AutoCAD Civil 3D贴图
- or计算遇到存在零“0”的情况
- PBX220评测报告
- ubuntu android编译和开发环境配置记录
- 元宇宙核心技术:概述——未来已来
- java数字猜大小游戏_java实现猜数字小游戏
- python Numpy 生成一个随机矩阵(整数型)
热门文章
- Excel VBA入门(6) - Worksheet对象常用方法事件
- O2O商城网站建设方案
- OpenHarmony轻量系统开发【8】其它驱动开发示例
- 【jQwidgets】千分位
- ultravnc,4款不能错过的ultravnc汉化版
- android inflate 方法,Android LayoutInflater中 Inflate()方法应用
- 微信/钉钉电脑端登录后手机端不再提醒
- recyclerview 动态设置高度_RecyclerView 动态调整高度, 调整item高度
- 科技开发规划VBS屌丝暗色调
- 电平转换电路的分析-MOS管、三极管