Unity
文章平均质量分 78
Unity
类人_猿
游戏开发人员,时不时会分享游戏的一些知识,感谢大家支持!
展开
-
Unity开发抖音小游戏广告部分接入
最近在使用Unity做抖音小游戏这块的内容,因为要接入广告,所以这里我把我接入广告的部分代码和经验分享一下。原创 2024-08-15 15:00:10 · 891 阅读 · 0 评论 -
Unity音频管理器插件AudioToolKit
最近在自己写音频管理器的时候在网上发现了一款比较好用并且功能很全的一个音频管理插件,叫做AudioToolKit的插件。如果需要的可以直接从我资源中找。Audio Toolkit是一个完整、易于使用且性能优化的框架,用于在Unity中播放和管理音乐和音效。专为AAA级游戏设计并使用。无需任何编码即可设置复杂的声音和音乐行为。脚本中的超简单音频触发:例如AudioController.Play(“MySoundID”);在运行时按音量可调的类别定义音频资产。使用高级选择模式指定替代声音。原创 2024-08-15 14:30:29 · 528 阅读 · 1 评论 -
Unity中对Spine动画播放、暂停、事件处理管理类
最近在做设计spine动画的抖音小程序,正好借此机会分享一下我对Spine动画的管理等相关知识,我们公司使用的是Spine4.0.64开发的动画,Unity使用的是Spine4.0,这里不分享spine的导入等其他操作了,如果想要了解可以看一下我之前的Unity如何使用Spine动画导出的动画文章。上述是我对Spine的一些控制和理解,希望可以帮助到大家。原创 2024-08-14 20:50:43 · 773 阅读 · 0 评论 -
Unity如何使用Spine动画导出的动画
最近公司在做抖音小程序的小游戏,我们这边动画部分使用的是spine动画,所以会有spine导入的问题,这里我正好说一下我目前使用的spine方式和美术导出的格式。原创 2024-08-14 17:52:35 · 1082 阅读 · 0 评论 -
模拟物理弧线轨道运动(模拟飞盘,子弹运动)
模拟弧线的运动,并且对象始终朝向运动的方向,模拟飞盘子弹的运动轨迹。这里我是没有加重力这么一个概念的,当然了重力其实比较简单可以参考我之前写的模拟抛物线运动里面我模拟了重力。这个轨迹运动是用了弧线的知识,可以上我上述的代码。原创 2024-06-27 15:59:51 · 347 阅读 · 0 评论 -
Unity中模拟抛物线(非Unity物理)
用Unity物理系统去做的抛物线想要控制速度或者想要细微的控制一些情况是非常困难的。所以想要脱离Unity的物理去做一个模拟抛物线的运动,最近在做关于模拟物理抛物线方面的研究。也主要是想要让这个模拟更加有可控性,这样就可以更好的去做游戏中的变化。如上图gif中分别对应了一个start小白球和一个 end小白球分别代表抛物线经过的方向,并且可以通过设置抛出去的高度来管理这条抛物线。原创 2024-06-27 15:09:02 · 692 阅读 · 0 评论 -
Unity接入PS5手柄和Xbox手柄以及Android平台的(以及不同平台分析)
最近公司的足球手游项目在操作的时候发现操作感不太够,经过大家的讨论之后想要接入手柄的支持(PS5手柄、Xbox手柄、北通手柄)。手柄的操作感还是在手机操作感之上的。这样也可以让有手柄的玩家体验手游。当我接入手柄的时候我发现,编辑器(PC)和手机上的按键是事件是不一样的,这里我下面也做了一个Android的小工具能看出来手柄的事件,也可以在编辑器上查看PC的手柄事件。这里我针对的是老版本的InputSystem,如果使用新版本的InputSystem可以忽略我今天要说的内容。测试手柄的工程和安卓包。原创 2024-06-13 13:35:18 · 797 阅读 · 0 评论 -
3D模型人物换装系统(五 模型核批之后模型uv不正确)模型UV不正确
最近在公司里给公司做模型优化合批的时候发现了模型的uv在合批之后无法正常展示,这里找了很多的原因,开始以为是模型设置或者是少了贴图或者是贴图大小不正确的问题,后来发现不是,结果是模型师展uv的时候展开的不对,我也是很无语,只能自己下载了Maya去重新展UV。总有不一样的坑会天天踩,只要心态好就没什么大不了。原创 2024-04-20 15:30:52 · 598 阅读 · 0 评论 -
3D模型人物换装系统(四 人物合批的表现(具体优化在哪里))
最近在公司做项目的优化,普通人物不合批的情况下每多一个材质球就多一个Batches(具体看灯光,有灯光则增加的更多),这样说可能有新手不太理解,这里看下面的截图我针对不同情况做个描述讲解。原创 2024-04-20 13:59:31 · 323 阅读 · 0 评论 -
Unity的滑动控制相机跟随和第三人称视角三
之前相机视角讲过了两篇文章了,但是都是自动旋转视角,今天来了新需求,自动视角的时候,人没办法看全场上所有的景象,所以可以自己控制相机的视口方向,说白了就是做一个拖拽事件,再根据拖动的大小来控制相机视口旋转量,这样就完成了相机的可控视口旋转。对比之前自动旋转的,这个版我觉着会更舒服一些,因为这个版的镜头更加可控制一些,但是这个也会让你操作变得复杂,无疑增加了一种操作负担。原创 2024-03-07 11:28:55 · 682 阅读 · 0 评论 -
Unity的相机跟随和第三人称视角二
之前讲过一个第三人称的相机镜头,今天想把原来的镜头改一下。之前测试的时候发现了原来相机的镜头移动是有点问题的,虽然都是平滑的移动但是其实不是环形移动。Unity的相机跟随和第三人称视角一第一篇的相机的移动我下面举个例子大家看一下,这里虽然都是平滑的移动,但是还是有差距的。原创 2024-03-06 14:58:22 · 1411 阅读 · 0 评论 -
求两个向量之间的夹角
求两个向量之间的夹角方法有很多,比如说Unity中的Vector3.Angle,Vector3.SignedAngle等方法,具体在什么情况下使用这个还是得看这几个函数的结果是什么。/// 计算夹角带有正负号/// 计算夹角带有正负号//求出两向量之间的夹角//叉乘求出法线向量//求法线向量与物体上方向向量点乘,结果为1或-1,修正旋转方向上述我提供得这两个方法经过测试也是可行的。第一种方法类似于Unity的原生API第二种GetAngle。原创 2024-02-27 14:36:36 · 778 阅读 · 0 评论 -
Unity的相机跟随和第三人称视角
最近足球项目的镜头在做改动,观察了一下实况足球的视角,发现他有多种镜头模式,带球时跟随人物进行旋转的第三人称视角,不带球时镜头锁定人和球都能看到的视角,其实还有很多镜头视角,这里我主要选择这两个来讲一下做一个demo。(我这里的demo不会做的很细大概做一个出来,他的镜头很细致细致到旋转多少度才会有反馈,并不是实时旋转反馈的)原创 2024-02-27 13:41:47 · 831 阅读 · 0 评论 -
Unity BuffSystem buff系统
现在基本做游戏都会需要些buff,之前我也在网上找也看到很多别人写的buff系统,并不是很符合我的心理预期,大部分在网上看到的都是面向过程的而不是面向对象的独立开来的buff,这样每改动一个小地方或者写一个buff基本上就要改动整个框架的部分,这对合作开发来说是比较致命的,就一个人来做的话还问题不大,但是人一单多了一人写几个buff最后就全乱了,今天把我之前写的这套框架发出来,经过验证了,原来的一个项目大概有3000多个buff,能够比较完美的支持下来。这个buff系统架构我放到CSDN资源。原创 2024-02-07 17:17:43 · 2030 阅读 · 0 评论 -
Unity接入GVoice腾讯实时语音
最近在做一个实时竞技类游戏,类似于王者荣耀类型的MOBA类实时联网游戏。针对战斗和组队界面需要加入语音的方便大家进行交流,看了几家语音价格也都是参差不齐最后选择的是腾讯的GVoice(价格很低折合费用下来一人一天0.012元),这个也是我们目前用的最合适的。原创 2024-02-05 13:32:54 · 1449 阅读 · 0 评论 -
D8: Type com.huazhuokeji.footballpark.BuildConfig is defined multiple times:
E:\unityProject\GVoice\Temp\gradleOut\launcher\build\intermediates\project_dex_archive\release\out\com\huazhuokeji\footballpark\BuildConfig.dex: D8: Type com.gcloudsdk.gcloudvoice.BuildConfig is defined multiple times: E:\unityProject\GVoice\Temp\gradleOut原创 2024-01-29 17:18:39 · 481 阅读 · 0 评论 -
Unity打包Android,jar文件无法解析的问题
最近在接入语音的SDK时,发现的这个问题.当我默认导入这个插件的时候,插件内部的文件夹(我下面话红框的文件夹)名字原本为GCloudVoice,这时候我默认打包的时候才发现下属红框的两个jar文件是无法解析的。原创 2024-01-29 17:05:57 · 660 阅读 · 0 评论 -
Unity网格篇Mesh(二)
本文接上一遍Unity网格篇Mesh(二)原创 2024-01-05 10:06:40 · 995 阅读 · 0 评论 -
toluaframework中C#怎么调用Lua的方法以及无GC方法
lua无GC分析,无拆装箱操作原创 2024-01-04 14:35:03 · 737 阅读 · 0 评论 -
关于游戏性能优化的技巧
好久没有在CSDN上面写文章了,今天突然看到鬼谷工作室技术负责人分享的关于游戏性能优化的技巧想梳理一下游戏优化这块的理解,这篇文章不会从细节入手,针对的是大部分游戏性能瓶颈期和对优化没有完整概念的开发。优化的方法和手段很多如果我说的不详细的地方欢迎大家评论探讨,感谢。对象池可以重复利用某一些对象,避免重复的创建实例化。比如特效使用对象池,当特效销毁时可以隐藏起来,并添加到对象池中没下次需要创建一样的特效时只需要从对象池中返回特效,并从对象池中移除。下次再使用这个对象池的时候就不需要重新实例化了。对象类别还包原创 2024-01-03 10:25:34 · 941 阅读 · 0 评论 -
刚体任意可编辑轨迹运动 模拟重力
贝塞尔曲线可编辑运动轨迹运动原创 2024-01-02 10:27:03 · 935 阅读 · 0 评论 -
Unity网格篇Mesh(一)
这时我们创建一个空物体并挂在组件,它将自动同时添加MeshFilter和MeshRenderer组件。并设置网格尺寸为x = 10和 y = 5。一个网格渲染器可以有多个材质球,它通常被用来渲染多组三角面,也成为子网格。它通常在外界导入的模型中使用,本片文章不使用多个材质球。创建一个新的C#脚本并加入水平和垂直尺寸。再视图左上角选择Display Mode,前三个选项分别是Shaded(着色)、Wireframe(线框)和Shaded。这篇教程中我们将利用顶点和三角面创建一个网格。如何创建自己的网格?原创 2024-01-02 10:25:03 · 1266 阅读 · 0 评论 -
Unity-Shader-渲染队列,ZTest,ZWrite
ZTest提供的状态较多。通过上面的实验结果,我们知道,按照从前到后的渲染顺序,首先渲染蓝色物体,蓝色物体深度测试通过,颜色写入缓存,但是关闭了深度写入,蓝色部分的深度缓存值仍然是默认的Max,后面渲染的绿色立方体,进行深度测试仍然会成功,写入颜色缓存,并且写入了深度,因此蓝色立方体没有起到遮挡的作用。这个例子中其他立方体的shader使用默认的渲染方式,绿色的将ZTest设置为Always,也就是说不管怎样,深度测试都通过,将绿色立方体的颜色写入缓存,如果没有其他覆盖了,那么最终的输出就是绿色的了。原创 2024-01-02 10:22:39 · 1215 阅读 · 0 评论 -
Unity Shader UVLightReveal (紫外线显示,验钞效果)
Component Mask掩码根据输入的格式来定GBRA 或者 XYZWNormalize 单位向量化Dot 向量A * 向量BIf[Community]判断A、B值传出值Difference Threshold为颜色存在的最大差值Color to Be Filtered指定的方向灯的颜色。原创 2023-12-28 20:46:07 · 983 阅读 · 0 评论 -
3D动态路障生成
上一篇文章介绍了Mathf.Lerp的底层实现原理,这里介绍一下跑酷类游戏的动态路障生成是如何实现的。动态路障其实比较好生成,但是难点在哪里,如果都是平面或者都是没有转弯的话还是比较好实现的,如果动态路障的实现遇到了有上坡下坡或者有转弯的地方我们如何去处理这些拐角点和上下坡的旋转和位置呢?本片文章主要讲解Mathf.Lerp()的用法,如果有不明白的可以看我上一篇文章。原创 2023-12-28 20:39:50 · 1197 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第六节 理解垃圾回收GC,提搞程序性能
虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。这一节我们将介绍垃圾回收机制GC以及一些提搞程序性能的技巧。一些良好的操作可以提高程序的性能:1.清理。不要打开资源而不关闭它。关闭所有你打开的连接。尽可能快的清理所有非托管资源。一般规则:使用非托管对象,初始化越晚越好,清理越早越好。2.不要过度引用。合理使用引用对象。原创 2023-12-27 10:05:29 · 521 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复
虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。这一节我们将介绍引用类型变量在堆中存储时会产生的问题,同时介绍怎么样使用克隆接口ICloneable去修复这种问题。在实际工作中,当我们需要复制引用类型变量时,我们最好让它实现ICloneable接口。这样可以让引用类型模仿值类型的使用,从而防止意外的错误产生。原创 2023-12-27 10:04:48 · 475 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 2
虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。继续上篇未完成的“参数传递对堆栈的影响”。我们已经演示了参数传递是怎么在内在中处理的。在接下来的文章里,存储在栈中的引用变量会产生什么情况以及怎么解决对象复制带来的问题。原创 2023-12-27 10:04:15 · 423 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 1
虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。这篇文章我们将介绍一些方法参数传递行为在堆与栈中的影响。前几节我们介绍了堆与栈的基本工作原理,程序执行时值类型与引用类型在堆栈中的存储。另外,我们已经介绍了一些关于指针的基本知识。这一节中参数传递对堆栈的影响很重要,下面会慢慢道来。原创 2023-12-27 10:03:39 · 469 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆,值类型与引用类型
虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。本文将介绍值类型与引用类型在堆栈里的基本存储原理。希望这篇文章能帮助你更好的理解值类型变量与引用类型变量的不同,同时理解什么是指针,什么时候用到指针。以后的文章里会更深入的介绍C#内存管理并详细阐述方法参数。原创 2023-12-27 10:02:54 · 599 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理
虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。这一节介绍栈的基本工作原理。栈可以想像成一个严格顺序执行的序列,不允许跳跃穿插访问。栈有自我清理功能。本文以执行一个简单C#方法为例阐述了栈的基本工作原理。下一节继续介绍堆栈工作原理以及一个更复杂一些的例子。原创 2023-12-27 10:02:20 · 449 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈
Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。堆与栈,并且他们都会帮助我们更好的运行程序。堆与栈寄存在电脑的操作内存中,并包含我们需要的信息使整个程序运行正常。原创 2023-12-27 10:01:33 · 459 阅读 · 0 评论 -
字符串用法总结
在 C# 中,您可以使用字符数组来表示字符串,但是,更常见的做法是使用 string 关键字来声明一个字符串变量。string 关键字是 System.String 类的别名。上面的方法列表并不详尽,请访问 MSDN 库,查看完整的方法列表和 String 类构造函数。String 类有许多方法用于 string 对象的操作。原创 2023-12-26 09:44:41 · 1017 阅读 · 0 评论 -
dynamic与反射补充
get;set;get;set;Age = age;} } [ InfoAttribute("英雄类名" , 255) , InfoAttribute("英雄装备" , 1024) ] public class HeroInfo {原创 2023-12-26 09:44:06 · 352 阅读 · 0 评论 -
C#索引器
就像属性(property),您可使用 get 和 set 访问器来定义索引器。但是,属性返回或设置一个特定的数据成员,而索引器返回或设置对象实例的一个特定值。换句话说,它把实例数据分为更小的部分,并索引每个部分,获取或设置每个部分。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。索引器声明的时候也可带有多个参数,且每个参数可以是不同的类型。C# 允许索引器可以是其他类型,例如,字符串类型。索引器定义的时候不带有名称,但带有 this 关键字,它指向对象实例。原创 2023-12-26 09:43:28 · 851 阅读 · 0 评论 -
C# 委托(Delegate)
一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。一个合并委托调用它所合并的两个委托。上面的委托可被用于引用任何一个带有一个单一的 string 参数的方法,并返回一个 int 类型变量。下面的实例演示了委托的声明、实例化和使用,该委托可用于引用带有一个整型参数的方法,并返回一个整型值。委托声明决定了可由该委托引用的方法。原创 2023-12-26 09:42:50 · 407 阅读 · 0 评论 -
C# 事件(Event)
事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。其他接受该事件的类被称为 订阅器(subscriber) 类。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。发布器(publisher)类的对象调用这个事件,并通知其他的对象。上面的代码定义了一个名为 BoilerLogHandler 的委托和一个名为 BoilerEventLog 的事件,该事件在生成的时候会调用委托。在类的内部声明事件,首先必须声明该事件的委托类型。原创 2023-12-26 09:42:08 · 382 阅读 · 0 评论 -
C# 不安全代码(指针)
当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量。不安全代码或非托管代码是指使用了指针变量的代码块。指针 是值为另一个变量的地址的变量,即,内存位置的直接地址。就像其他变量或常量,必须在使用指针存储其他变量地址之前声明指针。个人认为:在C#中当我们定义变量时,其内部构造函数已经将指针自动定义好,估计是为了防止开发人员定义出错或者分配问题。指针变量声明的一般形式为:下面是指针类型声明的实例:在同一个声明中声明多个指针时,星号 * 仅与基础类型一起写入;而不是用作每个指针名称的前原创 2023-12-26 09:40:45 · 1142 阅读 · 0 评论 -
C#多线程(补充)
但是通常来说,应当慎重使用Abort()方法,如果在当前线程中抛出该异常,其结果是可预测的,但是对于其他线程,它会中断任何正在执行的代码,有可能中断静态对象的生成,造成不可预测的结果。Task类可以获取线程的返回值,也可以定义连续的任务——在一个任务结束结束后开启下一个任务,还可以在层次结构中安排任务,在父任务中可以创建子任务,这样就创建了一种依赖关系,如果父任务被取消,子任务也随之取消。调用Task类的RunSynchronously()方法,可以实现同步调用,直接在当前线程上调用该任务。原创 2023-12-26 09:38:27 · 440 阅读 · 0 评论 -
c#多线程
总结一下同步方法和异步方法的区别:1、同步方法由于主线程忙于计算,所以会卡住界面。异步方法由于主线程执行完了,其他计算任务交给子线程去执行,所以不会卡住界面,用户体验性好。2、同步方法由于只有一个线程在计算,所以执行速度慢。异步方法由多个线程并发运算,所以执行速度快,但并不是线性增长的(资源可能不够)。多线程也不是越多越好,只有多个独立的任务同时运行,才能加快速度。3、同步方法是有序的。异步多线程是无序的:启动无序,执行时间不确定,所以结束也是无序的。原创 2023-12-26 09:36:49 · 1365 阅读 · 0 评论