抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

开个新坑,最近瓶颈期,我觉得需要多敲代码,让自己更熟悉unity.

教程原链接:

https://www.udemy.com/course/project-little-adventurer-learn-to-create-a-3d-action-game/

b站视频链接:

尝试了解unity热更新时,总会看到ab包、Addressables、AssetBundle、xlua等关键字,但是没深入了解的话很难搞清楚这几个是啥关系。今天我就尝试去缕一缕! ..待续

开始换装之前,首先需要了解一些概念.

参考部分

以下内容转载自博客:

https://sunra.top/2021/11/07/uniyt-change-suit/

目前的UI Toolkit比较适合做画面覆盖ui

暂时的缺陷如下:

image-20221119130244980

教程来自b站:

阿严_独立游戏开发

本篇是笔记.

说明

unity创建脚本时初始化的内容可以通过修改模板来diy。

下面是修改步骤:

查找模板文件位置

本文转载自csdn

https://blog.csdn.net/xiaoyaoACi/article/details/119887467?spm=1001.2014.3001.5502

image-20221116174713651

详细看原帖地址:https://blog.csdn.net/xiaoyaoACi/article/details/119324146?spm=1001.2014.3001.5502

ready动画结束后游戏开始,开始计时,直到死亡或者胜利再暂停计时。

新建ClearTime脚本用来更新时间文本,开始动画过后再计时

public class ClearTime : MonoBehaviour
{
[SerializeField] Text timeText;
[SerializeField] VoidEventChannel levelStartedEventChannel;//开始游戏
[SerializeField] VoidEventChannel levelClearedEventChannel;//玩家过关
[SerializeField] StringEventChannel cleardTimeTextEventChannel;//带string参数的频道
[SerializeField] VoidEventChannel playerDefeatedEventChannel;//玩家失败
float clearTime;//时间
bool stop = true;//计时停止

private void OnEnable()
{
//游戏开始
levelStartedEventChannel.AddListener(LevelStart);
//玩家通关
levelClearedEventChannel.AddListener(levelCleared);
//玩家失败
playerDefeatedEventChannel.AddListener(HideUI);
}
private void OnDisable()
{
//游戏开始
levelStartedEventChannel.RemoveListener(LevelStart);
//玩家通关
levelClearedEventChannel.RemoveListener(levelCleared);
//玩家失败
playerDefeatedEventChannel.RemoveListener(HideUI);
}
private void FixedUpdate()
{//当计时停止时 返回.
if (stop)
return;
clearTime += Time.fixedDeltaTime;
//将clearTime转化为秒,按格式输出
timeText.text = System.TimeSpan.FromSeconds(clearTime).ToString(@"mm\:ss\:ff");
}
void LevelStart()
{//开始游戏
stop = false;//开始计时
}
void levelCleared()
{//过关
HideUI();
cleardTimeTextEventChannel.Broadcast(timeText.text);
}
void HideUI()
{
stop = true;//计时停止
GetComponent<Canvas>().enabled = false;//关闭ui显示
}
}

过关时间显示在Victory Screen

说明:为角色胜利镜头做特殊定制

image-20221026021132507

follow属性用玩家对象

image-20221026021156345

过关功能实现

说明:过关时开启ui,切换状态为vitory,落地后再播放动画。

VictoryScreen中增加代码:订阅按钮功能,唤出鼠标指针。

using UnityEngine;
using UnityEngine.UI;
public class VictoryScreen : MonoBehaviour
{
[SerializeField] VoidEventChannel levelClearedEventChannel;//获取事件频道
[SerializeField] Button nextLevelButton;
private void OnEnable()
{
levelClearedEventChannel.AddListener(ShowUI);
nextLevelButton.onClick.AddListener(SceneLoader.LoadNextScene);//订阅下一关按钮功能
}
private void OnDisable()
{
levelClearedEventChannel.RemoveListener(ShowUI);
nextLevelButton.onClick.RemoveListener(SceneLoader.LoadNextScene);//订阅下一关按钮功能
}
private void ShowUI()
{
GetComponent<Canvas>().enabled = true;
GetComponent<Animator>().enabled = true;
Cursor.lockState = CursorLockMode.None;
}
}

说明:玩家碰到尖刺或者被黑球撞到就会死亡

功能实现

尖刺碰撞

首先选中所有尖刺,为他们添加脚本Spike