![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unity游戏开发笔记
文章平均质量分 67
清木Moyu
这个作者很懒,什么都没留下…
展开
-
Amplify Shader Editor手册 Unity ASE(中文版)
Amplify Shader Editor手册 Unity ASE教程翻译 2022-08-07 03:23:53 · 11818 阅读 · 2 评论 -
Unity中C#单例模式使用总结
一、单例模式优点单例模式核心在于对于某个单例类,在系统中同时只存在唯一一个实例,并且该实例容易被外界所访问; 意味着在内存中,只存在一个实例,减少了内存开销;二、单例模式特点只存在唯一一个实例; 提供统一对外访问接口,使得全局可对该单例的唯一实例进行访问; 自行实例化(私有构造函数,不允许外界对其进行实例化)。三、单例模式使用资源管理器,资源对象数据的加载和卸载(无状态不需要实例化的对象); 单一客户端连接服务器等; 生命周期在游戏中永不消毁的对象。四、单例模式注意点原创 2021-09-28 00:49:59 · 376 阅读 · 0 评论 -
Unity使用System.Data.dll报错
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' and 'netstandard, Version=2.0.0.0版本不统一造成的,打开工程文件下的Assembly-CSharp.csproj,搜索System.Data,找到下面2处// 项目中使用的System.Data.dll,你自己存放的<Reference Include="System.Data"> <HintPat原创 2021-09-27 15:15:03 · 1156 阅读 · 0 评论 -
Unity 引入sqlite依赖dll时 报错Loading assembly failed “Assets/Plugins/Mono.Data.Sqlite.dll“解决方法
问题描述:在引入sqlite依赖dll出现以上错误:mono.data.sqlite.dll和system.data.dll解决方法:导入的dll和unity内部编译器的target版本应该有差异,网上分享的都是各自版本的dll,不一定适用,到unity目录下 \Editor\Data\MonoBleedingEdge\lib\mono\unityjit 文件夹下,复制所需文件到Asset/plugins覆盖旧的报错dll,错误即可消除:...原创 2021-09-27 14:33:27 · 1490 阅读 · 0 评论 -
【Unity SurfaceShader】学习笔记(八)光照模型
LitSphere(Matcap)发光球体光照模型就是将发光球体的纹理映射在球体上,来实现光照效果。这可以创造一些效果细腻的发光球体效果,但是它不受光照影响,改变光照的方向,球体的光照效果不变。如果要在固定视角的场景里制作细腻的球体光照,这会是一个不错的选择。准备小球纹理贴图: 定义Properties: Properties { _MainTint ("Diffuse Tint", Color) = (1,1,1,1) .转载 2021-09-26 16:40:39 · 516 阅读 · 0 评论 -
【Unity SurfaceShader】学习笔记(七)镜面反射
Unity内置的高光函数Unity内置了一种高光光照模型——BlinnPhone。使用方法如下:Shader "Custom/BlinnPhong"{ Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _MainTint ("Diffuse Tint", Color) = (1,1,1,1) _SpecColor ("Specular Color", Color) = (1转载 2021-09-26 16:38:56 · 1052 阅读 · 0 评论 -
【Unity SurfaceShader】学习笔记(六)Cubemap
Cubemap是一种类似天空盒的由六张贴图组成的贴图。它是用于一些需要反射效果的材质,用来反射周围的环境。如果要表现金属材质,通常会给它添加一张反射贴图,来模拟金属表面反射的环境的颜色。因为金属之类的材质它本身其实是没有颜色的,它的颜色就是它反射的周围物体的颜色。如果给金属赋予银白色,并不能得到金属的质感,要让它反射周围的颜色。立方图就是这样一种记录了周围环境颜色的贴图。Unity提供了一个RenderToCubemap的方法在脚本中生成Cubemap,官网代码.将代码拷贝下来,然后在场景中随意地搭个场转载 2021-09-26 16:28:37 · 2026 阅读 · 0 评论 -
【Unity SurfaceShader】学习笔记(五)法线贴图
法线贴图是一种在低模上模拟高模的效果的技术。这是维基对它的介绍。法线贴图类似凹凸贴图的升级版,凹凸贴图记录了物体表面凹凸的情况,法线贴图记录了物体表面凹凸的光照信息。光照信息即是入射光与法线的夹角信息。为了提高性能,模型的面数越少越好,很多细节的东西都是用贴图去弥补。但是光照是基于顶点去计算的,这样高光阴影等光照的表现就不够真实。于是前辈们发明了法线贴图这个办法,用贴图记录表面的光照信息,也就是用RGB值存储法线坐标的XYZ值,使低模也能够有高模的光照信息,从而表现出高模的光照效果。这是一种存储空间换计转载 2021-09-26 16:21:01 · 1185 阅读 · 0 评论 -
【Unity SurfaceShader】学习笔记(四)混合纹理
混合纹理纹理混合就是将几张纹理重合在一起显示。最常见的情形是地形纹理。混合纹理可以优化性能,这样只要渲染一次混合后的纹理即可,而不必渲染多次。接下来要介绍的就是如何混合纹理制作地形着色器:先准备几张贴图:这几张就是要混合图片。我们还需要下面这张图片,这张图片就决定了图片是如何混合的:(可以先转到后面看效果)好了,上代码(我还是直接贴全部吧):Shader "Custom/Textures" { Properties { _MainTint (转载 2021-09-26 16:13:40 · 813 阅读 · 0 评论 -
【Unity SurfaceShader】学习笔记(三)让纹理动起来
让纹理动起来通过更改Input结构体里UV坐标,我们可以让纹理动起来。这是一段河流的简易Shader:Shader "Custom/ScrollUVs" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _ScrollXSpeed ("X Scroll Speed", Range(0, 10)) = 2 _ScrollYSpeed ("Y Scroll S转载 2021-09-23 19:31:42 · 300 阅读 · 0 评论 -
【Unity SurfaceShader】学习笔记(二)用纹理改善漫反射
用纹理改善漫反射上一篇里我们做的HalfLambert的效果是这样的:我们看到,亮部到暗部没有自然的过渡,暗部直接涂成深灰。就像初学者画的素描,直接将暗部涂黑,没有变化。这是因为这种光照计算太简单了,现实生活中,暗部因为漫反射的存在不会像画面上那么暗。但如果要引入光照计算的话,那太复杂了,我们可以用纹理来改善它。因为我们需要一张纹理贴图,先在Properties里声明纹理:_RampTex ("Ramp Texture", 2D) = "white"{}然后再CGPROGRAM转载 2021-09-23 17:36:50 · 322 阅读 · 0 评论 -
【Unity SurfaceShader】学习笔记(一)认识结构
认识结构创建SurfaceShader1. 新建Unity Project。2. 在Assets文件夹下新建三个文件夹:Materials、Shaders、Textures。3. 在Shaders文件夹下右键,Create-Shader-Standard Surface Shader,命名为MySurfaceShader。4. 在Materials文件夹下新建Material,命名为MySurfaceShader,将它的Shader改为新建的Shader。5. 新建一个Cube,将新建的材质转载 2021-09-23 15:41:32 · 611 阅读 · 0 评论 -
Unity3d 移除某个GameObject的所有子物体
在开发游戏的时候,经验会遇到这样的需求:移除某个物体下面的所有子物体,比如排行榜列表的刷新,清空某个列表等。虽然Unity3d提供了一些现成的API可以操作,但是要正确移除一个物体下的所有子物体,还需要注意一些问题通过Transfrom的childCount属性可以获取当前物体有多少个子物体parent.transform.childCount通过transform.get(index)方法返回的是子物体的transform,直接移除是不对的Transform transform;f.原创 2021-09-10 18:25:43 · 3134 阅读 · 0 评论 -
Unity 中的 SetActive() 、 OnEnable()、OnDisable()
一、Unity 3D中的 GameObject.SetActive() 与 MonoBehaviour.OnEnable()、MonoBehaviour.OnDisable()其实这三之前的关系很简单:SetActive(true),很触发MonoBehaviour.OnEnable()事件,就算对象之前本就是activeSelf==true,事件依然会发生;SetActive(false),很触发MonoBehaviour.OnDisable()事件,就算对象之前本就是activeSelf==f原创 2021-09-10 18:20:36 · 4468 阅读 · 1 评论 -
用VScode开发Unity心得,和一些必备插件
自从用了半个月的vscode 感觉要起飞了,功能相当强大,从来没有过的感觉,能吧他哥哥visualstudio甩十条街。安装的之后要翻墙,他会自动下载一些所需要的包接下来我介绍一些插件C# XML Documentation Comments快速生成代码注释头/// <summary>/// 说明/// </summary>Bracket Pair Colorizer让你的括号有属于自己的颜色提高开发效率C#这个是必备的不...转载 2021-08-30 12:13:18 · 3886 阅读 · 1 评论 -
Unity绘制圆、椭圆、多边形
unity画圆原理是绘制多边形,增加多边形的边数,当边数到达一定的数量后,看起来就是一个光滑的圆using System.Collections;using System.Collections.Generic;using UnityEngine;//该物体需要 LineRenderer组件,也可以手动添加LineRenderer组件,把这个注释掉[RequireComponent(typeof(LineRenderer))]public class CirclesDrawer : Mo.原创 2021-04-23 16:57:25 · 4474 阅读 · 0 评论 -
TapTap物理画线游戏,使用Unity实现2D物理画线功能
实现效果如下:本工程已上传到GitHub,感兴趣的同学可自行下载学习。GitHub地址:https://github.com/linxinfa/UnityPhysicsDrawLine物理画线的核心就是:物理+画线。物理:想要有物理特性,最简单的做法就是挂碰撞体(Collider)和刚体(Rigidbody)组件。画线:可以使用LineRenderer组件来实现画线功能。1、创建物体挂组件创建一个空物体,重命名为Line,挂上EdgeCollider2D、Rigid.转载 2021-04-22 03:14:49 · 1342 阅读 · 0 评论 -
Unity下,移动撞墙后抖动的解决方案
Unity下的移动方案:1.Rigidbody.MovePosition2.Rigidbody.AddForce3.Transform.Translate;Transform.position = vector3;目前主要分这三大类的移动方式。1和2是物理移动方式3是实体对象坐标的移动方式然后说说题目,为啥会抖动呐:public class Test : MonoBehaviour{ public float m_nSpeed = 0; void Update转载 2021-04-22 03:06:21 · 2493 阅读 · 4 评论 -
Unity粒子系统图片材质制作
先创建材质球:文件夹下右键->Create->Material编辑材质球:Shader->Legacy Shaders->Particles->Alpha Blended颜色就选择默认的RGBA(128,128,128,128),不要修改,Texture选择需要的图片即可做好材质后把它拖到粒子中的 Renderer->Material 即可...原创 2021-03-10 16:27:25 · 4111 阅读 · 0 评论 -
Unity粒子系统
一、粒子系统主界面:二、粒子系统下各个子模块: Main module//主要模块 Emission//发射 Shape//形状 Velocity Over Lifetime//粒子在生命周期内的速度 Limit Velocity Over Lifetime//粒子在生命周期内的极限速度 Inherit Velocity//速度继承 Force Over Lifetime//粒子在生命周期内的受力 Color Over Lifetim...转载 2021-03-10 11:10:22 · 4556 阅读 · 0 评论 -
Unity 使用物理射线(Physics.Raycast),实现扇形区域碰撞检测三种方法
方法1:实现原理:(lookAngle / 2) / lookAccurte 很简单,就是射多几条角度平均的射线。可以设置角度,精度(射线数量),来调节扇形区域的检测。每条射线夹角是总夹角处于2,再除于精度。 1. 默认是射出一条向前的射线,精度为0。2. 设置角度为90,精度为1,就会多出两条相对正前方45度的射线。3.设置精度为2。实现代码//放射线检测private bool Look(StateController...转载 2021-02-26 16:22:44 · 5217 阅读 · 0 评论 -
Unity3D 本地数据持久化记录存储
下面介绍几种 Unity本地记录存储的实现方式。第一种 Unity自身提供的 PlayerPrefs//保存数据PlayerPrefs.SetString("Name",mName);PlayerPrefs.SetInt("Age",mAge);PlayerPrefs.SetFloat("Grade",mGrade)//读取数据mName=PlayerPrefs.GetString("Name","DefaultValue");mAge=PlayerPrefs.GetInt(转载 2021-01-24 02:05:18 · 452 阅读 · 0 评论 -
Unity 对象池
概念我们先讲讲对象池是什么,有什么用。在游戏的制作过程中,我们可能会碰到这样的情况,就像现在最火的吃鸡游戏一样,我们有一把枪,开枪的时候射出子弹。每个子弹即一个对象,正常情况,我们的处理方式可能会是,每开一枪,就GameObject.Instantiate()一个新的子弹,当子弹到达极限距离的时候再GameObject.Destroy()销毁它。假设有射出1000发子弹,我们就会执行1000次这样的操作,然而在Unity中Instantiate和Destroy操作,不仅影响性能还容易产生内存碎片,总之就转载 2021-01-14 14:35:34 · 203 阅读 · 0 评论 -
简单理解与使用对象池模式(unity中实现)
一、对象池概念对象池模式并不是游戏开发独有的设计模式,它的设计思路与其他开发中的数据库连接池、线程池的思路等是一样的。其核心思想是,使用完不直接删除,而是将其放回池子里,需要用的时候再取出来。 对象池模式的出现主要优化两点:1、防止对象被频繁的创建和删除,从而内存抖动、频繁GC(垃圾回收)2、对象初始化成本较高但是因为传统软件开发的对象通常都是轻中里量级的, 分配/释放对象的开销可以忽略不计,所以所以在传统的软件开发中朴素的对象池应用还是比较少的。一般都是特定对象为了②上优化,例如.转载 2021-01-14 10:54:44 · 296 阅读 · 0 评论 -
Unity项目的.gitignore配置
Unity项目只需要关注Assets、ProjectSettings、Packages三个文件夹的版本控制。最新版的Unity基本已经将设置默认为可版本管理状态。我使用的版本是Unity2019.4.13。如果不放心,大家可以自行查看一下这两个配置的地方是否正确。Edit --> 项目设置 --> 编辑器确保如下图两项设置正确:最后让我们在项目中创建.gitignore文件:[Ll]ibrary/[Tt]emp/[Oo]bj/[Bb]uild/[Bb]uilds/转载 2021-01-09 01:41:55 · 3737 阅读 · 1 评论 -
Unity FBX模型动画提取
角色已经人形化(Humanoid)了,那它的动画可以用在其它的模型上了也就是可以共用一套模型动画了,但是你有没有发现那动画是和fbx模型绑在一起的,没关系你可以选中这几个动画文件按Contrl+D就可以提取出来了,然后你可以把整个fbx模型都删掉了,新生成的动画已经不再基于fbx了,这样可以大大减小资源大小。using UnityEngine;using UnityEditor;using System.Collections;using System.IO; public cl...原创 2021-01-05 15:50:51 · 2849 阅读 · 1 评论 -
Avatar Mask 动画混合
Unity关于动画,大致分为动画融合动画混合。具体使用到的东西大概就是BlendTree和Avatar Mask前者主要解决类似跑的时候转向这种问题,而后者是用来解决诸如边跑边招手,或者攻击的问题。这里主要记录一下Avatar Mask的使用心得。首先先创建Animator Controller,双击打开Animator Controller,添加你所需要的动画,在左侧layer层可以看到默认的是只有一个Base Layer的(layerIndex起始值为0,也就是0层),在这层添加诸如走路这些基础转载 2021-01-04 18:04:23 · 605 阅读 · 0 评论 -
Unity中协程(IEnumerator)的使用方法介绍
在Unity中,一般的方法都是顺序执行的,一般的方法也都是在一帧中执行完毕的,当我们所写的方法需要耗费一定时间时,便会出现帧率下降,画面卡顿的现象。当我们调用一个方法想要让一个物体缓慢消失时,除了在Update中执行相关操作外,Unity还提供了更加便利的方法,这便是协程。在通常情况下,如果我们想要让一个物体逐渐消失,我们希望方法可以一次调用便可在程序后续执行中实现我们想要的效果。我们希望代码可以写成如下所示:void Fade(){ for (float f = 1f; f >..原创 2020-12-30 11:43:58 · 167 阅读 · 0 评论 -
C#Socket服务端框架之SuperSocket教程
正在学习中,学完后完善学习链接:supersocket官网官网转载一官网转载二官网转载三SuperSocket服务器的简易实现SuperSocket的搭建--通过配置启动快速入门一快速入门二快速入门三创建控制台应用(.net framework),然后通过 项目->管理NuGet程序包 搜索安装 SuperSocket...原创 2019-11-15 02:38:10 · 1053 阅读 · 0 评论 -
Unity游戏开发笔记(三)
控制相机视野跟随本例只有2个坦克,所以控制视野在2个坦克中间即可Main Camera 上挂载脚本 FollowTargetpublic class FollowTarget : MonoBehaviour{ public Transform player1; //路标1,unity中指定 public Transform player2; //路标2,unity...原创 2019-11-06 00:48:26 · 254 阅读 · 0 评论 -
Unity游戏开发笔记(二)
C#中关于as关键字的使用在C#中提供的很好的类型转换方式总结为:Object => 已知引用类型——使用as操作符完成;Object => 已知值类型——先使用is操作符来进行判断,再用类型强转换方式进行转换;已知引用类型之间转换——首先需要相应类型提供转换函数,再用类型强转换方式进行转换;已知值类型之间转换——最好使用系统提供的Conver类所涉及的静态方法。...原创 2019-10-30 01:01:37 · 588 阅读 · 0 评论 -
Unity游戏开发笔记(一)
Window->Rendering->Lighting Settings 下的Scene->Auto Generate 关闭(自动渲染)节约时间和资源选中当前摄像机Main Camera,修改Clear Flags(背景)把Skybox(天空盒子)换成Solid Color(纯色)MainCamera的Projection可选择Perspective【透视】,Ort...原创 2019-09-29 12:12:39 · 364 阅读 · 0 评论