欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多Unity3D资源、Unity3D培训视频、Unity3D教程、Unity3D常见问题、Unity3D项目源码,【狗刨学习网】unity极致学院,致力于打造业内unity3d培训、学习第一品牌。很多手机游戏的关卡都是采用激活和未激活的状态当某一关通过以后 则再次进入关卡选择界面时 相应的图标显示激活状态 否则为未激活状态如愤怒的小鸟这里使用unity3d内置GUI系统绘制按钮之前我们需要知道哪些关卡是已经通过了的在unity3d中可以使用PlayerPrefs来保存关卡信息 详见PlayerPrefs我们使用一个boolean数组来标识关卡的激活状态var m_bActive : boolean[];在初始化过程中读取PlayerPrefs保存的关卡信息 如果已经通过则为true 否则为false 关卡通过条件取决于具体的游戏规则 例如每关所用时间小于3分钟为通过等等m_bActive = new boolean[m_iLevelTotals];for (idx = 1; idx < m_iLevelTotals; idx)(关卡通过条件) ? m_bActive[idx] = true : m_bActive = false;m_bActive[0] = true;这里将第一关默认为激活状态 不然所有关卡全锁定 则现场直憋了通过初始化 已经知道了关卡的通过信息绘制关卡图标之前 我们知道unity3d的GUI有GUISkin和GUIStyleGUISkin可以指定多个GUI的风而GUIStyle只是针对一个GUI风因此我们要为关卡的按钮定义一个GUIStyle var m_GuiStageBtn : GUIStyle;并有一个激活状态的图片和未激活状态的图片var m_texLocked : Texture2D;var m_texActive : Texture2D;下面开始绘制关卡图标 这里假设当前页有关 则要绘制个图标 4行4列// col_1for ( i = 0; i < ; i = 4){if (!m_bEasyActive)m_GuiStageBtn.normal.background = m_texLocked;elsem_GuiStageBtn.normal.background = m_texActive;if (GUI.Button(Rect(, * i , , ), "", m_GuiStageBtn)){if (!m_bEasyActive)return;if (m_bEffectActive)audio.PlayOneShot(g_ButtonDownClip);g_iCurrentLevel = i 1;LoadSelectLevel(g_iCurrentLevel);}}// col_2for ( i = 1; i < ; i = 4){if (!m_bEasyActive)m_GuiStageBtn.normal.background = m_texLocked;elsem_GuiStageBtn.normal.background = m_texActive;if (GUI.Button(Rect(, * (i - 1) , , ), "", m_GuiStageBtn)){if (!m_bEasyActive)return;if (m_bEffectActive)audio.PlayOneShot(g_ButtonDownClip);g_iCurrentLevel = i 1;LoadSelectLevel(g_iCurrentLevel);}}// col_3for (i = 2; i < ; i = 4){if (!m_bEasyActive)m_GuiStageBtn.normal.background = m_texLocked;elsem_GuiStageBtn.normal.background = m_texActive;if (GUI.Button(Rect(, * (i - 2) , , ), "", m_GuiStageBtn)){if (!m_bEasyActive)return;if (m_bEffectActive)audio.PlayOneShot(g_ButtonDownClip);g_iCurrentLevel = i 1;LoadSelectLevel(g_iCurrentLevel);}}// col_4for ( i = 3; i < ; i = 4){if (!m_bEasyActive)m_GuiStageBtn.normal.background = m_texLocked;elsem_GuiStageBtn.normal.background = m_texActive;if (GUI.Button(Rect(, * (i - 3) , , ), "", m_GuiStageBtn)){if (!m_bEasyActive)return;if (m_bEffectActive)audio.PlayOneShot(g_ButtonDownClip);g_iCurrentLevel = i 1;LoadSelectLevel(g_iCurrentLevel);}}当然 可以在绘制之前 也就是 if (GUI.Button(...)) 之前 直接根据当前关卡的激活状态来处理按钮的激活状态 加上GUI.enabled = m_bActive;很简单 但是在循环绘制时候要细心 设想这只是绘制个图标 若是绘制很多 再加上Easy模式 Hard模式 Expert模式等等 则很容易出错 但是原理基本上不变 使用Unity3d的内置GUI 则绘制GUI时的位置是很头疼的 而且GUI的绘制函数OnGUI是消耗比较大的 再加上drawcall带来的渲染效率在手机游戏的应用中都是不容忽视的问题.
推荐整理分享手机游戏关卡制作(手机关卡类游戏),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:游戏关卡制作,游戏关卡ui,手机游戏关卡制作方法,关卡设置游戏,游戏关卡怎么设计,手机游戏关卡制作教程,手机游戏关卡制作软件,手机游戏关卡制作软件,内容如对您有帮助,希望把文章链接给更多的朋友!
更多内容,请访问【狗刨学习网】unity极致学院
声明:此篇文档时来自于【狗刨学习网】社区-unity极致学院,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。
Unity3D--如何控制UGUI的触摸 使其可以控制穿透UGUI触摸到其它物体 如何控制UGUI触摸使可以控制穿透UGUI触摸到其它物体方法1:其它物体通过EventSystem.current.currentSelectedGameObject来进行判断那么就是UGUI当想穿透的时候,不
Unity3d 组件设计的思考 在使用unity3d之前,我已经知道组件设计的概念,我们某个项目实际上也是基于组件的,虽然底层引擎只是设计了一个最简单的组件框架,遗憾的是其他部分,
[置顶] Unity中对SQL数据库的操作 在Unity中,我们有时候需要连接数据库来达到数据的读取与储存。而在.NET平台下,ADO.NET为我们提供了公开数据访问服务的类。客户端应用程序可以使用A