最近在学习UI框架,无奈没有完整的项目学习,四处搜索找了这款游戏源码,在Unity2018上完美运行。于是乎开始学习开发这款游戏。今天主要完成的任务时拼UI。搭建了3个场景, StartScene, LoadingScene, MainScene。PlayScene比较复杂,包含了复杂的逻辑,放在最后学习。

1.StartScene

这个场景比较简单,主要包括3个部分:背景,Logo,开始按钮。

逻辑:点击开始按钮,进入LoadingScene。

在UICamera或者Canvas(StartScene)物体上挂载脚本StartMgr.cs

 using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class StartMgr : MonoBehaviour
{
public Button btnStart;
private void Start()
{
if(btnStart != null)
{
//给按钮添加监听事件
btnStart.onClick.AddListener(OnLoadLevel);
}
} private void OnLoadLevel()
{
SceneManager.LoadScene();
} }

2.LoadingScene

这个场景包含的主要元素是:背景、Logo、齿轮(含旋转的动画),进度条。

加载游戏用到了异步加载技术,在LoadScene物体上挂载脚本LoadScene.cs。

 using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System.Collections.Generic;
public class LoadScene : MonoBehaviour
{
public Slider progressBar;
//当前加载进度
private float currentProgress = ;
//目标加载进度
private float targetProgress = ; private void Start()
{
//启动协程
StartCoroutine("LoadingScene");
} private IEnumerator LoadingScene()
{
//异步加载
AsyncOperation asyncOp = SceneManager.LoadSceneAsync();
//没有加载完毕时
while (asyncOp.progress < 0.9f)
{
Debug.Log("正在疯狂加载中...");
currentProgress = asyncOp.progress;
yield return UpdateProgressBarValue();
}
currentProgress = 1f;
yield break;
} private IEnumerator<WaitForEndOfFrame> UpdateProgressBarValue()
{
while (targetProgress < currentProgress)
{
Debug.Log("正在更新进度...");
targetProgress += 0.01f;
progressBar.value = targetProgress;
yield return new WaitForEndOfFrame();
}
yield break;
} }

3.MainScene

这个场景元素比较多,分为七大块。Main, PersonalInfo,Action,TAsk,Install,Explain

今天完成的逻辑比较简单,就是点击头像打开个人中心面板及其关闭逻辑。代码如下:Person

PersonalController.cs负责个人中心面板逻辑,MainSceneController负责整个场景游戏逻辑。

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MainSceneController : MonoBehaviour
{
public Button headBtn;
public GameObject personalInfo; private void Start()
{
Init();
} private void Init()
{
headBtn.onClick.AddListener(OnHeadBtn);
}
private void OnHeadBtn()
{
personalInfo.SetActive(true);
} }
 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PersonalController : MonoBehaviour
{
public InputField nameInput;
public InputField mottoInput;
public Button sureBtn;
public Button closeBtn; private void Start()
{
Init();
} private void Init()
{
sureBtn.onClick.AddListener(OnSureBtn);
closeBtn.onClick.AddListener(OnCloseBtn);
}
private void OnSureBtn()
{
PlayerPrefs.SetString("name", nameInput.text);
PlayerPrefs.SetString("motto", mottoInput.text);
OnCloseBtn();
} private void OnCloseBtn()
{
gameObject.SetActive(false);
}
}

最新文章

  1. Windows 服务的安装(1)
  2. vpn打通结果ping不通
  3. Odoo attrs X2many 类型的过滤
  4. CentOS 7将网卡名称eno16777736改为eth0
  5. Apache HTTP Server多个拒绝服务漏洞
  6. asp.net 导入
  7. 转:PHP的线程安全ZTS与非线程(NTS)安全版本的区别
  8. c++11 生产者/消费者
  9. 【G】开源的分布式部署解决方案文档 - Web Deploy
  10. mysql数据库开启日志
  11. vue、rollup、sass、requirejs组成的vueManager
  12. C++ 指针和引用 吐血整理 Pointer&amp;Reference
  13. idea 错误: 找不到或无法加载主类
  14. 史上最全的select加锁分析(Mysql)
  15. C#5种方式生成缩略图
  16. Android SDK Mangaer 需要下载的组件
  17. MongoDB探索之路(二)——系统设计之CRUD
  18. spark1.0属性配置以及spark-submit简单使用
  19. Lucene_索引(域)的查询
  20. php中var_dump()函数

热门文章

  1. 框架源码系列十:Spring AOP(AOP的核心概念回顾、Spring中AOP的用法、Spring AOP 源码学习)
  2. nginx 内置变量
  3. ORACLE调优深入理解AWR报告(转)
  4. jquery实现同时展示多个tab标签+左右箭头实现来回滚动
  5. maven 中的mirror详解
  6. ubuntu 14.04 安装python包psycopg2
  7. JavaScript 事件绑定函数
  8. window下强制删除文件
  9. CSS斜切角
  10. 剑指offer——python【第29题】最小的K个数