当前位置: 首页 > news >正文

【Unitydemo制作】音游制作—控制器与特效

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创
👨‍💻 收录于专栏:就业宝典

🅰️推荐专栏

⭐-软件设计师高频考点大全



文章目录

    • 前言
    • 🎶(==1==) 特效
      • 结算特效
      • 游戏特效
      • 场景特效
    • 🎶(==2==) 控制器
      • 账户控制器
      • 数据控制器
      • 音轨控制器
      • 面板启动器
    • 🅰️


前言


🎶(1 特效


结算特效


在这里插入图片描述

游戏特效


在这里插入图片描述

场景特效


在这里插入图片描述


🎶(2 控制器


账户控制器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;//-------------------------------
//-------功能: 账户控制器
//-------创建者:         -------
//------------------------------public class acountContorller : SingleManager<acountContorller>
{public AcountData foreverAcountData = new AcountData();  //用来存储上一次的账户/// <summary>/// 用Json序列化存储数据/// </summary>/// <param name="name"></param>public void SaveData(AcountData acountData, string name){if (acountData == null) //如果为空的话{Debug.Log("为空");foreverAcountData.aount.Add(name); //直接存名字JsonManager.Instance.SaveData(foreverAcountData, "acountArrary");}acountData.aount.Add(name);JsonManager.Instance.SaveData(acountData, "acountArrary");}/// <summary>/// Json序列化读取数据/// </summary>/// <param name="name"></param>/// <returns></returns>public AcountData ReadData(){return JsonManager.Instance.LoadData<AcountData>("acountArrary");}}

数据控制器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  数据管理
//___________创建者:
//_____________________________________
//-------------------------------------
public class DataContorl : SingleManager<DataContorl>
{//场景public bool levelGame;  //是否是关卡游戏public bool livingGame; //是否是生存模式public bool foreverGame;//是否是无尽模式public float speed;//中介存储,供外部调用public AudioClip[] audioClip = new AudioClip[5];public int index = 0;//单例模式中单个全局信息不会随着改变public PlayerData foreverPalyerdata = new PlayerData();  //用来存储上一次选中的item数据//private List<ServerData> serverLists = new List<ServerData>();//public List<ServerData> ServerLists => serverLists;/// <summary>/// 用Json序列化存储数据/// </summary>/// <param name="name"></param>public void SaveData(string name, PlayerData data){JsonManager.Instance.SaveData(data, name);}//更新存储高分信息public void UpdateHightSocer( int socers , int index){switch (index){case 1:if (socers > foreverPalyerdata.AllScore) //如果大于关卡模式的最高星星就保留否则不保留{foreverPalyerdata.AllScore = socers;}break;case 2:if (socers > foreverPalyerdata.livingScore) //如果大于生存模式的最高分数就保留否则不保留{foreverPalyerdata.livingScore = socers;}break;case 3:if (socers > foreverPalyerdata.foreverScore) //如果大于无尽模式的最高分数就保留否则不保留{foreverPalyerdata.foreverScore = socers;}break;default:break;}SaveData(foreverPalyerdata.userName , foreverPalyerdata);}public void CloseALL(){levelGame = false;livingGame = false;foreverGame = false;}/// <summary>/// Json序列化读取数据/// </summary>/// <param name="name"></param>/// <returns></returns>public PlayerData ReadData(string name){return  JsonManager.Instance.LoadData<PlayerData>(name);}/// <summary>/// 供外部调用识别账号密码是否正确/// </summary>/// <param name="userName"></param>/// <param name="password"></param>/// <returns></returns>public bool Tip(string userName, string password){try{string pass = ReadData(userName).password ;Debug.Log(pass);if (userName != null && pass == password){return true;}else return false;}catch{ return false; }}/// <summary>/// 供外部调用识别注册时是否有相同的账号/// </summary>public bool TipSame(string userName){Debug.Log("该账号已注册");return false;}/// <summary>/// 全局性玩家数据存盘/// </summary>public void UpdataPlayerInfo(){SaveData(foreverPalyerdata.userName, foreverPalyerdata);}}

音轨控制器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using SonicBloom.Koreo;public class LaneController : MonoBehaviour {//-------------------------------//-------功能: 音轨管理器脚本  //-------创建者:          //------------------------------RhythmGameController gameController;[Tooltip("此音轨使用的键盘按键")]public KeyCode keyboardButton;[Tooltip("此音轨对应事件的编号")]public int laneID;//对“目标”位置的键盘按下的视觉效果public Transform targetVisuals;//上下边界public Transform targetTopTrans;public Transform targetBottomTrans;//包含在此音轨中的所有事件列表List<KoreographyEvent> laneEvents = new List<KoreographyEvent>();//包含此音轨当前活动的所有音符对象的队列Queue<NoteObject> trackedNotes = new Queue<NoteObject>();//检测此音轨中的生成的下一个事件的索引int pendingEventIdx = 0;public GameObject downVisual;//音符移动的目标位置public Vector3 TargetPosition{get{return transform.position;}}public bool hasLongNote;public float timeVal = 0;public GameObject longNoteHitEffectGo;// Update is called once per framevoid Update() {if (gameController.isPauseState){return;}//清除无效音符while (trackedNotes.Count>0&&trackedNotes.Peek().IsNoteMissed()){if (trackedNotes.Peek().isLongNoteEnd){hasLongNote = false;timeVal = 0;downVisual.SetActive(false);longNoteHitEffectGo.SetActive(false);}gameController.comboNum = 0;gameController.HideComboNumText();gameController.ChangeHitLevelSprite(0);gameController.UpdateHP();trackedNotes.Dequeue();}//检测新音符的产生CheckSpawnNext();//检测玩家的输入if (Input.GetKeyDown(keyboardButton)){CheckNoteHit();downVisual.SetActive(true);}else if (Input.GetKey(keyboardButton)){//检测长音符if (hasLongNote){if (timeVal>=0.15f){//显示命中等级(Great Perfect)if (!longNoteHitEffectGo.activeSelf){gameController.ChangeHitLevelSprite(2);CreateHitLongEffect();}timeVal = 0;}else{timeVal += Time.deltaTime;}}}else if (Input.GetKeyUp(keyboardButton)){downVisual.SetActive(false);//检测长音符if (hasLongNote){longNoteHitEffectGo.SetActive(false);CheckNoteHit();}}}//初始化public void Initialize(RhythmGameController controller){gameController = controller;}//检测事件是否匹配当前编号的音轨public bool DoesMatch(int noteID){return noteID == laneID;}//如果匹配,则把当前事件添加进音轨所持有的事件列表public void AddEventToLane(KoreographyEvent evt){laneEvents.Add(evt);}//音符在音谱上产生的位置偏移量int GetSpawnSampleOffset(){//出生位置与目标点的位置float spawnDistToTarget = targetTopTrans.position.z - transform.position.z;//到达目标点的时间float spawnPosToTargetTime = spawnDistToTarget / gameController.noteSpeed;return (int)spawnPosToTargetTime * gameController.SampleRate;}//检测是否生成下一个新音符void CheckSpawnNext(){int samplesToTarget = GetSpawnSampleOffset();int currentTime = gameController.DelayedSampleTime;while (pendingEventIdx < laneEvents.Count&& laneEvents[pendingEventIdx].StartSample < currentTime + samplesToTarget){KoreographyEvent evt = laneEvents[pendingEventIdx];int noteNum = evt.GetIntValue();NoteObject newObj = gameController.GetFreshNoteObject();bool isLongNoteStart = false;bool isLongNoteEnd = false;if (noteNum > 6){isLongNoteStart = true;noteNum = noteNum - 6;if (noteNum > 6){isLongNoteEnd = true;isLongNoteStart = false;noteNum = noteNum - 6;}}newObj.Initialize(evt, noteNum, this, gameController, isLongNoteStart, isLongNoteEnd);trackedNotes.Enqueue(newObj);pendingEventIdx++;}}/// <summary>/// 生成特效的有关方法/// </summary>void CreateDownEffect(){GameObject downEffectGo = gameController.GetFreshEffectObject(gameController.downEffectObjectPool, gameController.downEffectGo);downEffectGo.transform.position = targetVisuals.position;}void CreateHitEffect(){GameObject hitEffectGo = gameController.GetFreshEffectObject(gameController.hitEffectObjectPool, gameController.hitEffectGo);hitEffectGo.transform.position = targetVisuals.position;}void CreateHitLongEffect(){longNoteHitEffectGo.SetActive(true);longNoteHitEffectGo.transform.position = targetVisuals.position;}//检测是否有击中音符对象//如果是,它将执行命中并删除public void CheckNoteHit(){if (!gameController.gameStart){CreateDownEffect();return;}if (trackedNotes.Count>0){NoteObject noteObject = trackedNotes.Peek();if (noteObject.hitOffset>-6000){trackedNotes.Dequeue();int hitLevel= noteObject.IsNoteHittable();gameController.ChangeHitLevelSprite(hitLevel);if (hitLevel>0){//更新分数gameController.UpdateScoreText(100 * hitLevel);if (noteObject.isLongNote){hasLongNote = true;CreateHitLongEffect();}else if (noteObject.isLongNoteEnd){hasLongNote = false;}else{CreateHitEffect();}//增加连接数gameController.comboNum++;}else{//未击中//减少玩家HPgameController.UpdateHP();//断掉玩家命中连接数gameController.HideComboNumText();gameController.comboNum = 0;}noteObject.OnHit();}else{CreateDownEffect();}}else{CreateDownEffect();}}
}

面板启动器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:  
//___________功能: UI面板启动器
//___________创建者:
//_____________________________________
//-------------------------------------
public class UIContorl : SingletonMono<UIContorl>
{// Start is called before the first frame updatevoid Start(){UIManager.GetInstance().ShowPanel<BKPanel>("BKPanel"); //先加载背景面板 UIManager.GetInstance().ShowPanel<LoginPanel>("LoginPanel"); //先加载开始登陆面板// DataContorl.GetInstance().LoadServerData(); //加载所有区服数据到数据管理器中Debug.Log(Application.persistentDataPath); }   /// <summary>/// 提供改变提示面板内容的方法并显示/// </summary>/// <param name="component"></param>public void ChangeTipPanel(string component){UIManager.GetInstance().ShowPanel<TipPanel>("TipPanel", E_UI_Layer.Top, (panel) =>{panel.ChangComponent(component);});}
}

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


相关文章:

【Unitydemo制作】音游制作—控制器与特效

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;就业…...

[程序员] 最近的感悟,错误处理占大头?

根据昨天分享的一个问题&#xff0c;想到的。 在代码里&#xff0c;异常处理的代码也算是占大头&#xff0c;扑面而来的就是发生错误时怎么处理的大片代码&#xff1b;而且出现问题的概率是绝对的占大头。所以&#xff0c;异常代码出现bug的概率也在不知不觉中增加&#xff01…...

vue3(一) - 结构认识

通过之前博客应该已经完成了vue脚手架的认识和创建&#xff08;地址&#xff09;&#xff0c;这节我们简单介绍一下需要使用的一些关键技术&#xff0c;后续在详细介绍 结构目录 创建脚手架时&#xff0c;我选择了TypeScript,store,route这三个选项 index.html入口 node_mo…...

数据库迁移——kettle开发01

背景&#xff1a;数据库的多种多样&#xff0c;在搭建项目之初&#xff0c;并没有详细考虑到数据库的建设&#xff0c;当增加配置不能满足业务场景需要时&#xff0c;这时候考虑到使用更高性能的数据库&#xff0c;如将MySQL更换为oracle数据库。或者在搭建新项目时&#xff0c…...

Netty: Netty中的组件

文章目录 一、EventLoop1、EventLoop2、EventLoopGroup&#xff08;1&#xff09;处理普通时间和定时任务&#xff08;2&#xff09;处理IO任务 二、Channel三、Future&Promise四、Handler&Pipeline五、ByteBuf 一、EventLoop 1、EventLoop EventLoop本质是一个单线程…...

Julia编程01:Julia语言介绍

在2020上半年&#xff0c;因为疫情无法返校&#xff0c;所以在家待了半年&#xff0c;期间学习一点了R语言、Python、Julia、linux和C语言&#xff0c;只是学习基础语法并没有项目练习&#xff0c;因此返校半年后差不多都不记得了&#xff0c;现在重新捡起Julia丰富下当时写的笔…...

二叉树顺序结构及链式结构

一.二叉树的顺序结构 1.定义&#xff1a;使用数组存储数据&#xff0c;一般使用数组只适合表示完全二叉树&#xff0c;此时不会有空间的浪费 注&#xff1a;二叉树的顺序存储在逻辑上是一颗二叉树&#xff0c;但是在物理上是一个数组&#xff0c;此时需要程序员自己想清楚调整…...

【Python】pandas连续变量分箱

路过了学校花店 荒野到海边 有一种浪漫的爱 是浪费时间 徘徊到繁华世界 才发现你背影 平凡得特别 绕过了城外边界 还是没告别 爱错过了太久 反而错得完美无缺 幸福兜了一个圈 &#x1f3b5; 林宥嘉《兜圈》 import pandas as pd import numpy as np from sklearn.model_selecti…...

Qt 打卡小程序总结

1.Qt::Alignment&#xff08;枚举类型&#xff09;用于指定控件或文本的对齐方式 Qt::AlignLeft&#xff1a;左对齐。Qt::AlignRight&#xff1a;右对齐。Qt::AlignHCenter&#xff1a;水平居中对齐。Qt::AlignTop&#xff1a;顶部对齐。Qt::AlignBottom&#xff1a;底部对齐。…...

【qt】标准项模型

标准项模型 一.使用标准型项模型1.应用场景2.界面拖放3.创建模型4.配套模型5.视图设置模型6.视图属性的设置 二.从文件中拿到数据1.文件对话框获取文件名2.创建文件对象并初始化3.打开文件对象4.创建文本流并初始化5.读取文本流6.关闭文件7.完整代码 三.为模型添加数据1.自定义…...

一文深度剖析 ColBERT

近年来&#xff0c;向量搜索领域经历了爆炸性增长&#xff0c;尤其是在大型语言模型&#xff08;LLMs&#xff09;问世后。学术界开始重点关注如何通过扩展训练数据、采用先进的训练方法和新的架构等方法来增强 embedding 向量模型。 在之前的文章中&#xff0c;我们已经深入探…...

css左右滚动互不影响

想实现左右都可以滚动&#xff0c;且互不影响。 只需要再左边的css里面 .threedlist {cursor: pointer;width: 280px;position: fixed;height: 100vh; /* 定义父容器高度 */overflow-y: auto; /* 只有在内容超过父容器高度时才出现滚动条 */} 如果想取消滚动条样式 .threedli…...

【linux-uboot移植-mmc及tftp启动-IMX6ULL】

目录 1. uboot简介2. 移植前的基本介绍&#xff1a;2.1 环境系统信息: 3. 初次编译4. 烧录编译的u-boot4.1 修改网络驱动 5. 通过命令启动linux内核5.1 通过命令手动启动mmc中的linux内核5.1.1 fatls mmc 1:15.1.2 fatload mmc 1:1 0x80800000 zImage5.1.3 fatload mmc 1:1 0x8…...

Python-温故知新

1快速打开.ipynb文件 安装好anaconda后&#xff0c;在需要打开notebook的文件夹中&#xff0c; shift键右键——打开powershell窗口——输入jupyter notebook 即可在该文件夹中打开notebook的页面&#xff1a; 2 快速查看函数用法 光标放在函数上——shift键tab 3......

绿联NAS DXP系列发布:内网穿透技术在私有云的应用分析

5月23日&#xff0c;绿联科技举行了“新一代存储方式未来已来”发布会&#xff0c;发布了绿联NAS私有云DXP系列&#xff08;包括两盘位到八盘位的九款新品&#xff09;以及由绿联科技自研的全新NAS系统UGOS Pro。此次绿联发布的DXP系列九款产品&#xff0c;共有两盘位、四盘位、…...

力扣:242. 有效的字母异位词

242. 有效的字母异位词 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram"…...

设计模式14——组合模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 组合模式&#xff08;Composit…...

MyBatis面试题(Mybaits的优点、缺点、适用场合、与Hibernate有哪些不同)

一、Mybaits的优点&#xff1a; 1、基于 SQL 语句编程&#xff0c;相当灵活&#xff0c;不会对应用程序或者数据库的现有设计造成任 何影响&#xff0c;SQL 写在 XML里&#xff0c;解除 sql与程序代码的耦合&#xff0c;便于统一管理&#xff1b;提供 XML 标签&#xff0c;支持…...

python写接口性能测试

import time import requestsdef measure_response_time(api_url):try:start_time time.time()response requests.get(api_url, timeout10) # 设置超时时间为10秒end_time time.time()response_time end_time - start_timeprint(f"接口 {api_url} 的响应时间为&#…...

《暮色将尽》跨越世纪的历程,慢慢走向并完善自我

《暮色将尽》跨越世纪的历程&#xff0c;慢慢走向并完善自我 戴安娜阿西尔&#xff08;1917-2019&#xff09;&#xff0c;英国知名文学编辑、作家。著有《暮色将尽》《昨日清晨》《未经删节》《长书当诉》等。 曾嵘 译 文章目录 《暮色将尽》跨越世纪的历程&#xff0c;慢慢走…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...