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