🔥C#🔥
文章平均质量分 80
编程语言C#系列
周周的Unity小屋
一名中国非著名Unity3D软件开发程序员,专注研究Unity3D虚拟仿真/VRAR/游戏领域。我不是大佬,只是在追寻大佬的脚步;正在持续学习成长中,也将持续为大家分享Unity技术干货!愿在此结识更多各领域开发者,相互促进,共同进步!
展开
-
深入探索Unity协程:揭开CSharp迭代器背后的神秘面纱
Unity的协程的实现原理是基于C#语言的迭代器特性,通过定义一个协程函数(通过返回),将协程函数缓存为一个的对象,然后根据该对象的Current(是一个YieldInstruction对象或者null)来判断下一次执行需要间隔的时间,等到间隔时间结束后执行MoveNext执行下一阶段的任务,并继续根据新的Current确定下一次等待的时间间隔,直到MoveNext返回false标志着协程终止。理解了Unity协程的实现原理之后,我们完全可以自己写代码来实现类似Unity中的的效果。原创 2024-09-08 18:41:06 · 1473 阅读 · 0 评论 -
Unity使用自定义类型作为字典Key的最佳实践与避坑指南
代码层面出现bug的时候,很多时候还是一些底层的逻辑没有搞懂,平时还是要多测试多验证多了解原理。所以说在使用字典作为存储查询数据结构时还是建议使用不可变类型作为键,如何值类型(int、float等)或者常用的引用类型string。1.避免在字典操作期间修改键;2.作为键Key的对象需要重写并正确实现Equals和GetHashCode方法。通过,遵循这些原则,可以避免由于自定义类型对象作为字典键而引起的bug.原创 2024-09-08 18:38:53 · 1111 阅读 · 0 评论 -
Unity如何查找两个transform最近的公共parent
Unity如何查找两个transform最近的公共parent,这个方法的时间复杂度为O(h),其中h为两个Transform的最大深度。因为我们是从顶层开始比较,所以可以在较短的时间内找到最近的公共parent。原创 2024-07-12 23:59:25 · 469 阅读 · 0 评论 -
Unity获取当前系统时间实时显示并格式化输出
我们希望在Unity开发的软件里面如果当前系统时间戳并显示在UI上,那么如何实现呢?其实很简单,C#为我们提供了一个关于时间的类–DateTime,调用该类下的方法即可获取当前系统时间。DateTime是.NET框架类库中的一个预定义类,用于表示日期和时间。它可以存储从公元0001年1月1日午夜12:00:00.000开始至今的时间,以100纳秒为单位(即Ticks)。DateTime类包含了许多用于执行与日期和时间相关的操作的方法,如加减时间间隔、比较日期和时间、格式化日期和时间的字符串表示等。原创 2021-04-12 20:00:00 · 3830 阅读 · 3 评论 -
【Unity小功能开发实战教程】制作跟随倒计时变化的进度条
进度条的值如何跟倒计时关联?其实就是将这两者做一个映射关系:进度条的值是0到1,倒计时为 0到总时间;映射公式为:value/1.0f=倒计时剩余时间/总时间;根据这个公式就可以在实现倒计时的同时去实时更新进度条的值了。具体看博客教程.............原创 2022-07-07 10:05:55 · 4507 阅读 · 16 评论 -
Unity实现鼠标拾取电脑屏幕指定区域像素点颜色
开发时常遇到要动态修改物体或UI的颜色的需求,且需要像Unity编辑器一样弹出颜色选择器来选择颜色。我选择使用第三方插件ColorPicker来完成取色的功能。但在使用过程中我发现用取色笔取色时不能拾取屏幕外颜色。所以修改了源代码取色笔的功能,采取了.Net类库System.Drawing截取图像并转为Unity支持的纹理图像Texture的方法,将图像显示到颜色面板上,再利用texture.GetPixel方法获取该图像中心点像素颜色。满足了取色笔的功能,仅以此博客记录Unity取色笔功能的开发过程。..原创 2022-06-14 09:22:02 · 4183 阅读 · 32 评论 -
教你用简单上手的序列帧动画制作一个Unity的Loading加载界面
我们都知道电影或者说视频都是由一序列静止画面组成的。动画也是在一段时间内显示的一序列图像,每一帧较前一帧都有轻微的变化,当连续、快速地显示这些帧时,就会产生运动或者变化的错觉。基于此原理,我们Unity也有序列帧动画的概念,即我们可以在一定帧时间内改变Image对象上的精灵图,使数张“看上去相似、但实际上是有轻微变化”的图片交替更换,形成帧动画的效果。基于以上原理,本博客将演示如何实现序列帧动画效果制作一个Unity的Loading加载界面。......原创 2022-06-12 09:15:00 · 5144 阅读 · 19 评论 -
Unity实现对电脑文件夹和文件的重命名方法
项目中有导出文件或文件夹功能需求时,类似Unity导出包或打包exe一样,都要让用户选择路径,并输入指定名称,将导出的文件或文件夹命名为用户输入的名称。刚开始我想到的方法是使用System.IO命名空间下的File类的Move方法或FileInfo类的MoveTo方法来实现,但实践发现并不通用,我找到了一种在Unity中更实用的重命名文件夹和文件的方法,可直接对指定路径下的文件夹或文件重命名。本博客将演示用windows的库Microsoft.VisualBasic.Dll实现对电脑文件夹和文件的重命名方法原创 2022-06-05 09:00:00 · 6818 阅读 · 19 评论 -
Unity使用INIParser读写ini配置文件出现中文乱码问题的解决方法
本文主要演示了如何使用第三方插件【Advanced INI Parser】读写ini配置文件,在使用过程发现了使用插件读写时出现中文乱码的问题。并说明了INIParser插件读写ini文件的原理,解释了为什么它读写ANSI编码格式文件时出现中文乱码的情况,根据原理找到了解决读写ini出现中文乱码的方法。文本还列举了一些额外的知识点(包括INIParser插件的简单使用和Encoding类的知识)供大家学习和INIParser插件的获取方法.........原创 2022-06-04 16:16:57 · 3844 阅读 · 13 评论 -
Unity中使用I/O数据流技术的知识点整理
C#中I/O数据流技术提供了一种向计算机写入字节和从计算机读取字节的方式。使用I/O 能很方便的帮助我们操作计算机文件。文件I/O流介绍1.FileStream类的常用属性2.FileStream类的常用方法3.使用FileStream类操作文件使用I/O数据流操作文本文件1、StreamWriter类常用属性及说明2、StreamWriter类常用方法及说明3、StreamReader类常用方法及说明原创 2022-05-01 08:00:00 · 3657 阅读 · 1 评论 -
Unity使用Newtonsoft.Json插件实现XML与JSON数据的互转
Demo中把question.xml数据加载到XmlDocument对象里,然后调用Newtonfost.JSON包方法JsonConvert.SerializeXmlNode将xml文档转换为json格式的文本字符串,然后显示到Text上,并且通过IO流将json数据写入到question.json文件中,后面再将json字符串转为xml字符串,保存到toxml.xml文件中。Json.Net是一个读写Json效率比较高的.Net框架,高效快速读写json,rializer可以序列化你的.Net对象。原创 2022-04-21 13:18:07 · 3389 阅读 · 1 评论 -
unity生涯的开始——太空飞船小游戏制作
初识unity做的一个小 demo1、飞船等场景的设置场景布局:把灯光放到合适的位置,摄像机拉到灯光上方,在scene里面新建一个quad作为背景,给它贴上材质图,把飞船player拖到场景中,调整位置,在飞船尾巴添加一个喷火特效。2、给飞船写一个飞行脚本 Player.cs: public float speed = 5.0f; float moveH = Input.GetAxis("Horizontal"); float moveV = Input.GetAxis("Ve原创 2021-04-10 18:56:44 · 1795 阅读 · 1 评论 -
(Unity消防演练之灭火功能的前期准备)设计火势控制的脚本
设计火势控制脚本(为VR灭火功能做前期准备)火势控制脚本的设计思路**实际情况中,火应该是受到灭火措施后逐渐熄灭的,所以定义一个生命值上限和一个生命值表示火势大小,定义一个熄灭系数和一个恢复系数,放在Update每帧计算出最新的生命值,根据生命值更新火势,赋值给火粒子系统,改变它的transform.localScale。为1时火最大,为0时火熄灭;定义一个可以修改灭火系数的公开函数,给后期灭火脚本调用原创 2021-04-14 17:54:12 · 6756 阅读 · 30 评论 -
Unity使用滚动条Slider控制声音音量
在unity如何利用Slider控制声音的音量呢?其实原理很简单:我们知道声音的组件【AudioSource】身上的属性“volume”是控制它的音量的,volume的值范围是0~1;而滚动条Slider组件的值Value滑动范围也是0到1,那么我们让volume的值由value控制就行了。新建空物体命名为Sound。为其新建子物体命名为BGsound,将声音文件拖进去,初始设置非激活:添加一个Slider和Toggle,slider的value设置为1:新建脚本AudioControl:挂原创 2021-04-17 12:57:44 · 14780 阅读 · 15 评论 -
Unity学习制作Flappy Bird小游戏(超详细全教程,可发布到PC、Web、Android平台)
Flappy Birdflappy bird:一夜爆红的胖鸟这是一款简单又困难的手机游戏,游戏中玩家必须控制一只胖乎乎的小鸟,跨越由各种不同长度水管所组成的障碍。上手容易,但是想通关可不简单。Flappy bird 于2013年5月在苹果App Store上线,2014年2月份在100多个国家/地区的榜单一跃登顶,尽管没有精细的动画效果,没有有趣的游戏规则,没有众多的关卡,却突然大火了一把,下载量突破5000万次。一、工程创建和素材导入在Assets中创建不同的文件夹,存储声音、图片、脚本、材质素原创 2021-10-09 18:05:57 · 8801 阅读 · 3 评论 -
unity学习开发小球吃方块小游戏(从制作到发布程序,超详细全教程包你学会)
吃方块游戏超详细全教程,保姆式教学包你学会:通过学习本博客你将学会用unity开发小游戏的基础知识。 通过创建对象、添加脚本、控制相机跟随、旋转对象、碰撞检测、显示文本和发布程序七个实验来对Unity 3D游戏开发过程中的场景、Plane、Sphere、Cube对象、脚本、碰撞检测、UI以及程序发布等问题进行学习和练习。在博客文末最后列出了Unity 3D的各个菜单栏以及它们所包含的下拉菜单及其译名。...原创 2021-04-12 09:28:57 · 15704 阅读 · 42 评论 -
基于Unity+SqlServer的登录注册功能的实现
基于unity2018.3.6+sqlserver2014实现的登录注册功能。我给我的VR系统毕设做了一个简易的登录注册功能。1.在unity里搭建了一个登录面板如下图:往视图里添加3个Text(登录信息的提示、账号密码输入提示),3个button(用来挂载登录注册事件、退出系统)和两个inputText(用于输入账号密码)。2.搭建注册面板:跟登录面板一样创建游戏对象就行了,不同的是,这里加了一个确认密码的输入框,不过这里的确认密码我没有加任何代码逻辑,只是个装饰,可用可不用,后面完善功能时原创 2021-04-01 16:51:29 · 4955 阅读 · 27 评论 -
Unity答题系统3.0版本(增加题目导航栏和提交后显示题目正误标识功能)
3.0版本的答题系统题库信息存储在xml文档中,通过www的形式加载并解析,构建题目数据类。3.0版本增加了一个管理题目选项的数据结构,修复了1.0版本中题目选择后点击下一题或上一题已经选择的题目信息不保存的bug,这次可以通过题目管理类QuestionNumber来维护这些数据,让题目初始化的时候全部创建好并缓存到该类的数据结构中,需要的时候直接显示或隐藏即可,避免了频繁的实例化题目对象,浪费内存。2、3.0版本保存了上一题、下一题和交卷功能,同时增加了左侧题目导航栏和正误标示图功能,提交后显示正误标识原创 2022-03-30 15:13:00 · 5355 阅读 · 45 评论 -
Unity实现游戏里鼠标悬停在物体处显示UI提示(介绍、名称等信息)的一种方法(可配置的xml文件形式)
这里主要是通过xml文件的形式保存物体的信息,再编写代码去解析这些个物体的信息,如xml中的一个节点MouseOver节点保存了一个物体的路径和物体的名称,那么解析的时候我们就可以通过GameObject.Find()方法找到这个物体,并给它添加鼠标事件,当鼠标悬停在物体处时,触发鼠标事件函数,就可以显示该物体的名称了,这里使用到了Unity中三个鼠标事件函数:OnMouseEnter()、OnMouseOver()和OnMouseExit()。原创 2022-01-26 13:51:04 · 22832 阅读 · 33 评论 -
【数据结构】一看就会系列之线性表--顺序表(C#语言描述)
目录导航线性表线性表的接口定义顺序表顺序表的实现获得元素的操作插入操作删除操作求顺序表的长度清空操作判断顺序表是否为空判断顺序表是否为满附加操作按值查找顺序表的应用---元素倒置顺序存储结构的优缺点优点缺点线性表线性表是最简单、最基本、最常用的数据结构。其结构中的数据元素之间是一对一的线性关系。即:(1)除第一个位置的数据元素外,其他数据元素的前面都只有一个元素 ;(2)除最后一个位置的数据元素外,其他数据元素位置的后面都只有一个元素。线性表的接口定义/// 线性表的接口public interf原创 2022-01-17 17:22:18 · 1286 阅读 · 2 评论 -
Unity答题系统2.0版本(修改答题面板形式(滚动视图显示),增加提交后得分结果显示)
用Unity实现的答题系统2.0版本,此前已写过1.0版本的文章,这个是2.0版本的,2.0版本修改了答题面板的形式(使用滚动视图显示),可将全部题目加载出来,通过鼠标拖动滚动条查看题目作答,点击提交按钮会有提示,再次提交可显示得分面板,得分结果会统计,题目数,题目分值,答对数,答错数,未作答题目数和最终得分。(2.0版本没有多选题的逻辑,如有需要可参考1.0版本)原创 2022-01-12 16:13:03 · 7268 阅读 · 17 评论 -
Unity使用Aspose.Words创建表格和UI截图一起插入到Word中并保存到本地的一种解决方案
UI截图:通过Unity中的API:Texture2D.ReadPixels来读取屏幕区域像素,然后将图片数据转为二进制数据,再保存到本地。Aspose.words应用到Unity中,将文本、图片和创建的表格插入到模板Word中。使用数据分离的方法,首先定义表格数据类TableData,在这个类中,定义你的表名、表头、表格内容等,写方法将获取到的表格数据保存到这个类TableData的数据结构中,再根据这些数据创建表格数据的xml节点信息并保存下来,另外一个脚本里解析xml,生成表格,插入Word并保存。原创 2022-01-11 17:40:21 · 4244 阅读 · 11 评论 -
Unity答题系统
答题系统Demo前言大四毕设的时候,参考网上大佬的答题系统,移植到了我的毕设项目中去,总感觉那个答题系统不够满意,但是那会技术有限,没有去深入研究完善,而且总有bug,后面答辩后也没管了。工作了,学的东西多了点,琢磨着自己也搞个答题系统玩玩,这个demo用的是加载XML文档的方法创建题目,xml文档中可以设置题目是单选还是多选。有上一题、下一题的功能,每一题都有提交功能,只有选择了答案才能提交,提交了会显示题目的解析。xml文件可以任意增减题目节点,方便修改题目数据,能满足一般的答题系统的需求了。原创 2021-11-30 09:12:36 · 13672 阅读 · 57 评论 -
Unity制作圆环进度条加载场景资源
第一步:场景内UI圆环的搭建新建一张Panel作为背景图,在Panel下新建一张Image命名为RoundImage作为外圆环,在外圆环下新建一张image命名为RoundLoading作为内圆环,用来显示进度的,新建两个Text文本,一个作为文字说明,一个作为进度值显示用。调整每个图的位置大小。大概如下图:第二步:关键的地方:Image的设置外圆环和内圆环必须是大小一致、有颜色差的图片。RoundImage默认设置就好了,需要注意的是将RoundLoading属性设置为如下图:第三步:代码实原创 2021-09-22 13:16:05 · 2297 阅读 · 1 评论 -
Unity打开电脑本地计算器exe文件(调用PC平台下外部命令的方法)
C#为我们提供了System.Diagnostics.Process.Start()方法,在Windows平台下可以调用外部的命令测试代码:/// <summary> /// exe在电脑下的路径名,计算器比较特殊直接打开calc.exe即可 /// 如需打开其他exe,则需完整路径名称 /// </summary> private string path = "calc.exe";//fsquirt.exe蓝牙exe文件 private原创 2021-09-14 16:05:36 · 1504 阅读 · 1 评论 -
unity面试上机题:给公交车编号
要求如下:1、创建UI,在UI上显示0~9共10个数字,同时显示“确定”和“重置”两个按键;2、点击UI上的1个数字,在公交车的前面板和侧面板上同步显示所按的数字,并播放相应的声音;3、点击3个数字后,公交车的面板上不再显示后面再按数字。此时点出“确定”则依次播放所公交车面板上显示的3个数字的声音;4、任何时候点击“重置”,则公交车面板上的数字归0,之后可以重新给公交车编号;5、添加相机控制功能,可以方便地观看公交车各角度,包括拉远拉近。实现代码:CameraControl脚本实现相机控制功能原创 2021-07-16 14:24:56 · 1170 阅读 · 7 评论 -
Unity编程基础学习之C#基础一
1、变量变量是计算机语言中能储存计算机结果或能表示值的抽象概念。1.1 什么是变量变量是一种使用方便的占位符,可以根据需要随时改变变量中所存储的数据值。变量可以通过变量名访问,变量名是变量在程序中的标识。变量值是指它所代表的内存块中的数据。1.2 变量的数据类型变量是用来存储值得所在处,它们有名字和数据类型。1.2.1 值类型值类型变量是指内存中直接存储数据值的变量,主要包含整数类型,浮点类型及布尔类型等。***值类型采用堆栈分配存储地址,效率高。***值类型具有如下特性:(1)复制 值类型原创 2021-07-06 16:33:55 · 420 阅读 · 1 评论 -
基于sql2014+VS2015的报刊管理系统报告
报刊管理信息系统本系统是一个面向于企业的报刊订阅管理系统。系统是智能化的管理系统,它面向所有企业部门的职工用户,但具有安全性能。它能够实现报刊订阅的基本功能,包括新报刊信息的登录、录入、订阅、查询、统计等操作。用户合法注册后必须输入有效密码才能成功进入此系统,可以进行订阅报刊,查询信息,统计信息等操作。对于非法操作,系统有识别和防护措施。订阅信息处理的特点是订阅信息处理量比较大,所管理的信息信息种类繁多,而且订阅单、编辑单的发生量特别大,关联信息多,查询和统计的方式各不相同。因此在管理上实现起来有一定因原创 2021-04-15 22:40:58 · 885 阅读 · 3 评论