当前位置: 首页 > 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;慢慢走…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

flow_controllers

关键点&#xff1a; 流控制器类型&#xff1a; 同步&#xff08;Sync&#xff09;&#xff1a;发布操作会阻塞&#xff0c;直到数据被确认发送。异步&#xff08;Async&#xff09;&#xff1a;发布操作非阻塞&#xff0c;数据发送由后台线程处理。纯同步&#xff08;PureSync…...