极致21点开发DAY1
最近在学习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);
}
}
极致21点开发DAY1的更多相关文章
- 极致21点开发DAY2
今天完成的主要内容时MainScene场景中设置面板的开发.游戏逻辑:点击设置按钮,弹出音乐设置弹框,弹框内容包括音乐的打开与关闭,退出游戏. 点击退出游戏,弹出退出游戏确认面板.效果图: 1.首先在 ...
- 极致21点开发DAY4
完成的内容:1.修改上一篇博文中的Bug 2.完成任务窗口逻辑 using System; using System.Collections.Generic; using UnityEngine; ...
- 极致21点开发DAY3
今天完成的主要任务是活动窗口的显示与关闭,以及领取金币的逻辑.用到了数据持久化技术.我想记录的主要是领取金币的逻辑. 领取金币算法:如果今天没有领取金币,即可领取,否则什么都不做. 一句话描述足矣,但 ...
- python开发 Day1 python基础
编程语言主要从以下几个角度为进行分类,编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下. 编译和解释的区别是什么? 编译器是把源程序的每一条 ...
- Sea.js提供简单、极致的模块化开发体验
为什么使用 Sea.js ? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. ...
- 运维平台cmdb开发-day1
序读项目由来 终极目标,运维平台.自动化.装机,监控,安装软件,部署基础服务,资产管理,之前是excel,现在是客户端自动获取,变更记录 后台管理 api 采集资产 四种模式agent 定时,每天执行 ...
- 21:开发脚本管理服务端LVS案例
[root@lb03 scripts]# cat lv_manager.sh #!/bin/bash #定义只能是root用户执行 ];then echo "permission deny ...
- 移动端开发-Day1
什么是Node? 它是一个基于Chrome v8引擎的js运行环境,采用高效轻量级的事件驱动,非阻塞式的I/O模型. 非阻塞I/O? 例如,当程序运行到某一函数时,调用后立即返回,不需要等待函数执行完 ...
- 21 javaweb开发--bug调试技巧
1.当修改代码后,测试时没有任何效果 解决方案:换个浏览器试试,可能是浏览器缓存的原因.
随机推荐
- 乾坤合一~Linux设备驱动之I2C核心、总线以及设备驱动
我思念的城市已是黄昏 为何我总对你一往情深 曾经给我快乐 也给我创伤 曾经给我希望 也给我绝望 我在遥远的城市 陌生的人群 感觉着你遥远的忧伤 我的幻想 你的忧伤,像我的的绝望,那样漫长,,,,,这是 ...
- PHPExcel所遇到问题的知识点总结
工作中进行excel的时候遇到了两个问题, 1.excel表中列值过大,由于没有进行特殊处理,程序没法正常运行: 2.列值中含有日期格式的文本,不能正确读取: 所以通过网络搜索,并解决了问题,记录一下 ...
- axios设置application/x-www-form-urlencoded
this.$axios({ method: 'post', url: 'http://www.17huo.com/tusou/deeplorSearch.html', headers: { 'Cont ...
- mybatis09--自连接一对多查询
查询导师 下面的所有 老师的信息! 创建实体类 和对应的数据库 /** *导师的实体类 */ public class Teacher { private Integer id; private St ...
- C++ main函数的参数
C++的main函数可以没有输入参数,也可以有输入参数,而且只能有两个参数,习惯上coding如下: int main(int argc, char* argv[]) 或者 int main(int ...
- 剑指offer——python【第21题】栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- js设计模式(三)---代理模式
代理模式: 代理模式是为一个对象提供一个代理用品或占位符,以便控制对他的访问. 实现: 在 Web开发中,图片预加载是一种常用的技术,如果直接给某个 img 标签节点设置 src 属性,由于图片过大或 ...
- css小知识 2
效果为 为什么还出现出现不同的效果? 浏览器在解析第二个p的时候,因为第二个字母见没有空格,它会认为这是一个单词没有写完,所以不会换行 列表 1.无序列表ul 第二,内部必须有子代标签<li&g ...
- 【转载】python抓取网页时候,判断网页编码格式
在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取.但是在抓取过程中会遇到编码的问题, ...
- MySQL 大表优化方案(长文)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...