BeatSaber节奏光剑插件开发官方教程2-简单的插件示例
原文:https://wiki.assistant.moe/modding/example-mod
一、在开始之前
1 确保你已经看过教你如何添加插件模板的教程,且你已经使用插件模板创建了一个新项目
https://www.cnblogs.com/cation/p/10308764.html
2 如果此教程中有很多地方你看的一头雾水,那可能是因为你不太了解unity或c#,你需要先学习一些相关的知识
3 如果你已经学习过了前面的插件模板添加教程,你的当前视图应该是下图这样的:

4 本教程默认你对c#和unity有基本的了解,如果没有这方面基础的话还请先去学习下基本知识
二、简介
此教程将会引导你创建一个简单的插件,该插件可以记录我们miss了多少个方块,这个示例插件将包括:
1 一个包含组件类的空GameObject
2 TextMeshPro meshes,unity中用来显示文本的实例
3 events和actions的初步了解
三、设置变量
在开始之前,我们需要设置一些变量来协助我们的开发工作

| enabled | 是否进行计数的flag |
| counterPosition | 计数显示在界面中的位置 |
如果提示了“Vector3 variable”错误,你需要在代码的最前面添加“using UnityEngine;”
PS:
可以在OnApplicationStart()函数第一行添加如下代码:
Console.WriteLine("Hello World!");
这行代码可以帮助你进行代码的调试,你可以使用--verbose参数启动游戏,这样会伴随游戏启动一个调试窗口,调试窗口会显示异常信息和上述代码中你设置的调试信息。
四、创建一个GameObject
在“Plugin.cs”文件中我们只需要少量代码。
“SceneManagerOnActiveSceneChanged()”事件会在游戏场景变化时触发,所以我们可以在这里创建GameObject。

1 第一行代码做了个是否执行插件的判定,前面我们设置了enabled
2 第二行代码中判定当前的场景是否是“GameCore”,确保游戏开始时对插件进行初始化,避免在主菜单就初始化插件
3 第三行代码中MissedCounter报错了,因为你还没创建这个object呢
五、MissedCounter.cs
创建一个新的class,命名为MissedCounter.cs,并使其继承MonoBehavior。

后面很繁琐了,我直接贴代码出来,完整的代码可以这里下载(MissedCounter-master.zip):
https://github.com/Caeden117/MissedCounter
(或Q群810303476,群文件下载)
如果想知道其他的接口如何使用,可以到github上下载其他的开源插件代码参考。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using TMPro;
using System.Collections;
using System.Threading; namespace MissedCounter
{
class MissedCounter : MonoBehaviour
{
int counter = ;
private ScoreController score;
//private ComboUIController combo;
GameObject countGO;
TextMeshPro counterText; void Awake()
{
StartCoroutine(GetScore());
} IEnumerator GetScore()
{
while (true)
{
score = Resources.FindObjectsOfTypeAll<ScoreController>().FirstOrDefault();
//combo = Resources.FindObjectsOfTypeAll<ComboUIController>().FirstOrDefault();
//if (score != null && combo != null) break;
if (score != null) break;
yield return null;
}
Init();
} void Init()
{
counterText = this.gameObject.AddComponent<TextMeshPro>();
counterText.text = "";
counterText.fontSize = ;
counterText.color = Color.white;
//counterText.font = combo.GetPrivateField<TextMeshProUGUI>("_comboText").font;
counterText.alignment = TextAlignmentOptions.Center;
counterText.rectTransform.position = Plugin.counterPosition + new Vector3(, -0.4f, ); countGO = new GameObject("Label");
TextMeshPro label = countGO.AddComponent<TextMeshPro>();
label.text = "Misses";
label.fontSize = ;
label.color = Color.white;
//label.font = combo.GetPrivateField<TextMeshProUGUI>("_comboText").font;
label.alignment = TextAlignmentOptions.Center;
label.rectTransform.position = Plugin.counterPosition; if (score != null)
{
score.noteWasCutEvent += onNoteCut;
score.noteWasMissedEvent += onNoteMiss;
}
} void OnDestroy()
{
score.noteWasCutEvent -= onNoteCut;
score.noteWasMissedEvent -= onNoteMiss;
} private void onNoteCut(NoteData data, NoteCutInfo info, int c)
{
if (data.noteType == NoteType.Bomb || !info.allIsOK) incrementCounter();
} private void onNoteMiss(NoteData data, int c)
{
if (data.noteType != NoteType.Bomb) incrementCounter();
} private void incrementCounter()
{
counter++;
counterText.text = counter.ToString();
}
}
}
请务必关注我们的公众号获取最新资源和信息:

更多资源在我们的讨论Q群:
810303476
BeatSaber节奏光剑插件开发官方教程2-简单的插件示例的更多相关文章
- BeatSaber节奏光剑插件开发官方教程1-创建一个插件模板
原文:https://wiki.assistant.moe/modding/intro 一.简介 Beat Saber 开发环境:unity2018.C#..NET framework 4.6. 此教 ...
- BeatSaber节奏光剑双手柄MR教程
一.物料准备: 1 显卡1060及以上的PC主机 2 HTC VIVE头盔一套(头盔直插显卡上的HDMI接口) 3 1080P摄像头一个(插USB3.0) 4 绿幕一套,能覆盖整个摄像头的可拍摄范围即 ...
- RecyclerView(5)官方教程带简单示例
Create Lists The RecyclerView widget is a more advanced and flexible version of ListView. This widge ...
- Unity性能优化(3)-官方教程Optimizing garbage collection in Unity games翻译
本文是Unity官方教程,性能优化系列的第三篇<Optimizing garbage collection in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...
- Unity性能优化(4)-官方教程Optimizing graphics rendering in Unity games翻译
本文是Unity官方教程,性能优化系列的第四篇<Optimizing graphics rendering in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...
- Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
本文是Unity官方教程,性能优化系列的第二篇<Diagnosing performance problems using the Profiler window>的简单翻译. 相关文章: ...
- Unity性能优化(1)-官方教程The Profiler window翻译
本文是Unity官方教程,性能优化系列的第一篇<The Profiler window>的简单翻译. 相关文章: Unity性能优化(1)-官方教程The Profiler window翻 ...
- Google Guava官方教程(中文版)
Google Guava官方教程(中文版) 原文链接 译文链接 译者: 沈义扬,罗立树,何一昕,武祖 校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库, ...
- OpenGL官方教程——着色器语言概述
OpenGL官方教程——着色器语言概述 OpenGL官方教程——着色器语言概述 可编程图形硬件管线(流水线) 可编程顶点处理器 可编程几何处理器 可编程片元处理器 语言 可编程图形硬件管线(流水线) ...
随机推荐
- RelativeSource.TemplatedParent 属性wpf
今天看到这一句代码时候,自己只是知道绑定了,可是不知道绑定了什么啊 就去查了一下,后来说的好像是绑定的TemplateParent返回的 一个值.可是这是为什么呢, 有的说是绑定的是一个资源. 下面有 ...
- boost数据结构tuple
boost数据结构tuple tuple(元组)定义了一个有固定数目元素的容器,其中每个元素类型可以不相同,这与其它容器有着本质的区别!vector和array虽然可以容纳很多元素,但是元素的类型必须 ...
- 浏览器同源策略及Cookie的作用域
from:https://blog.csdn.net/wang379275614/article/details/53333054 如题,本文主要介绍两方面内容:首先简单介绍浏览器的同源策略与其带来的 ...
- 我如何让echarts实现了分组(原创插件echarts.group代码分享)
前言 echarts是百度出品的一款很棒的前端图表控件,被评为“百度少有的良心产品”.可以实现散点图.折线图.柱状图.地图.饼图.雷达图.K线图等等几十种常用.不常用的图表,效果酷炫. 示例地址:ht ...
- linux 项目自动部署脚本
1.使用maven获取源码部署,并可替换配置文件(金融数据分析平台) #!/bin/bash#设置变量cd /home#停止tomcatecho "开始停止tomcat..." p ...
- netty + Protobuf (整合二)
[正文]Protobuf 消息设计 疯狂创客圈 死磕Netty 系列之12 [博客园 总入口 ] 本文说明 本篇是 netty+Protobuf 实战的第二篇,完成一个 基于Netty + Proto ...
- python基础之类的内置__setattr__,__delattr__,__getattr__和 二次加工标准类型(包装)
一.内置attr:__setattr__,__delattr__,__getattr__ __setattr__ #添加/修改属性会触发它的执行 __delattr__ #删除属性的时候会触发 __g ...
- JS全选checkbox
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/ ...
- 【转】记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServe ...
- boost atomic
文档: http://www.boost.org/doc/libs/1_53_0/doc/html/atomic.html Presenting Boost.Atomic Boost.Atomic i ...