
unity3d
文章平均质量分 71
BraveRunTo
梦想成为一名职业游戏人
展开
-
行为树原理简介
行为树原理简介本篇博客整理总结自行为树(Behavior Tree)详细介绍。前言首先需要说明的是行为树和状态机都是实现游戏AI的一种手段,二者各有利弊。相对于行为树,经典状态机实现起来更简单,且执行效率更高,但是随着状态数量的增加,状态机的结构将会向着不可控的方向发展。而经典行为树则是使用起来结构更加清晰,对于复杂AI的开发效率更高,但是实现起来复杂,且执行效率较低。所以说二者各有千秋。不过现在行为树已经逐渐成为游戏AI开发的主流,具体原因可以看由赖勇浩翻译的《有限状态机时代终结的10大理由》这篇博原创 2021-11-12 20:27:12 · 2603 阅读 · 0 评论 -
JSON简介
JSON简介JSON概述JSON的全称为:JavaScript对象简谱(JavaScript Object Notation)JSON是国际通用的一种轻量级的数据交换格式,主要用于在网络通讯中用于传输数据,或用于本地数据存储和读取。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON结构JSON的注释:JSON的注释方式和C#一样:“//”:为单行注释。“/**/”:为多行注释。JSON的语法规则:符号含义:大括号 {} —— 对象中括号 [] —— 数组原创 2021-06-24 10:39:20 · 1372 阅读 · 0 评论 -
Unity之UGUI详解
UGUI文章目录UGUI六大基础组件概述Canvas对象上依附的:CanvasCanvas ScalerGraphic RaycasterRectTransformEventSystem对象上依附的:EventSystemStandalone Input ModuleCanvas画布组件Screen Space overlayScreen Space CameraWorld SpaceCanvasScaler画布缩放控制器组件学前准备:Constant Pixel Size恒定像素模式Scale With原创 2021-06-09 09:59:28 · 31912 阅读 · 4 评论 -
Unity引擎基础补充
Unity引擎基础补充本博客将对之前的Unity脚本,3D数学基础博客内容做一定的补充。所以部分知识点可能并不全。使用Unity的API,我们要清楚各个参数其代表的含义。3D数学基础基础的一些一次计算的方法不再赘述。Math和Mathf的区别Math是C#官方提供的数学计算的工具类,而Mathf是Unity提供的数学计算结构体。Mathf中包含了几乎所有Math中的数学计算方法,同时还额外添加了一些适用于游戏开发的数学计算方法。Lerpresult = Mathf.Lerp(start,原创 2021-05-14 23:19:55 · 1400 阅读 · 13 评论 -
TextMeshPro中文字体生成和字体材质更换
TextMeshPro中文字体生成和字体材质更换中文字体生成:TextMeshPro是unity提供的相较源Text更加强大,高效的字体组件。但其有一个严重的缺点就是默认不支持中文。所以我们需要制作一个支持中文的字体。TextMeshPro的制作过程和NGUI的字体生成很像。并和NGUI一样拥有图文混排的功能。首先我们需要导入TextMeshPro的组件,我们可以通过unity package手动搜索安装,也可以直接创建一个TextMeshPro的UI组件,unity会自动检测帮助我们安装TextM原创 2021-05-11 11:20:26 · 9604 阅读 · 1 评论 -
Xlua和C#使用简介
XluaC#调用Lualua解析器lua解析器可以让我们在unity中执行Lua,一般情况下,我们会保证它在unity中的唯一性。//创建一个lua解析器LuaEnv env = new LuaEnv();//执行Lua语言env.DoString("print('你好世界')");//像上面这样一句一句的执行lua脚本是非常不好的,所以可以使用lua脚本加载的知识来解决这个问题。//xlua默认的脚本寻找路径是在Resources文件夹中,但是由于unity并不能识别Lua文件,所以直接原创 2021-04-12 11:11:00 · 1466 阅读 · 0 评论 -
Lua基础简介
Lua基础简介第一个lua程序--[[这是多行注释]]----[[这是多行注释]]--[[这也是多行注释--]]--单行注释print("hello world");Lua变量--lua中的语法简介1:--[[1. lua可以没有分号结尾,有也不影响。这个看个人习惯了。2. lua中所有的额变量都不需要声明,直接写变量名就可以用,且变量类型取决于赋值的类型,这一点很像C#中的var。3. 需要清楚:lua是动态语言,即和javascript一样,虽然变量类型的获取方面很像var但不原创 2021-03-28 20:24:12 · 1026 阅读 · 0 评论 -
AssetBundle简介
AssetBundleAssetBundle简介什么是AssetBundle?AssetBundle我们简称其为AB包,它是一个用于特定平台的资产压缩包,有点类似于压缩文件。这里的资产包括:模型,贴图,预制体,材质球等。因此AB包的作用实际上和Resources文件夹的作用是很像的。但两者之间有很大的不同。Resources文件夹在打包的时候其中的内容就定死了,只读没有办法修改,而AB包却可以自定义存储位置,自定义压缩方式,以及最重要的它可以有后续的更新。AB包除了可以减少包体大小之外最大的好处就是原创 2021-03-18 15:16:47 · 2751 阅读 · 0 评论 -
XML基础
XML基础XML基础语法<!--注释-->其中version代表xml的版本,encoding代表使用的编码格式xml文件第一行必须要写这个,属于固定格式,第一行必须是这个,注释都不行,这里是有语法错误的<?xml version="1.0" encoding="UTF-8"?>xml基本语法必须有一个根节点标签必须成对出现标签之间可以直接包裹数据,也可以包裹标签xml对大小写敏感标签命名应当遵循变量命名规则特殊符号应当使用实体引用<PlayerI原创 2021-03-16 19:16:51 · 574 阅读 · 0 评论 -
一个unity有限状态机框架
一个unity有限状态机框架概述有限状态机又称有限状态自动机,简称状态机。定义:有限的多个状态在不同条件下相互转换的流程控制系统。状态:物体表现出来的状况,多指行为。比如奔跑,攻击这些都属于状态。条件:状态改变的依据。比如按下攻击键,按下奔跑键。状态转换表:配置角色状态和条件的一张表。状态机:管理所有的状态,协调组织状态的迁移。有限状态机的适用范围:敌人AI, 玩家托管,游戏/软件整体框架,可交互教程,所有的流程控制系统框架构建思路:首先我们构建一个状态表如下:当前状态条原创 2021-03-14 11:17:15 · 594 阅读 · 0 评论 -
Unity引擎音效系统简介
Unity引擎音效系统简介音频文件设置选项:Force To Mono:多声道转单声道Normalize:当强制转为单声道时,混合过程中被标准化。Load In Background:在后台加载,不阻塞主线程Ambisonic:立体混响声,如果音频文件包含混响声编码,请启动此项。LoadType:加载方式Decompress On Load:不压缩,加载快但是内存占用较高,适用于小音频Compress In Memory:压缩,加载慢内存占用小,适用于大音频Strea原创 2021-03-07 12:58:02 · 1113 阅读 · 0 评论 -
Unity引擎入门知识补充
Unity引擎入门知识补充基础知识补充1. Assets文件只要Assets文件还在就可以使用unityhub来打开,其他的文件丢失了都可以由unity引擎自动创建。2. Unity工作原理——反射unity引擎本质是一个软件,使用它时是处于运行中的。所以我们实际上是在一个运行中的软件中制作游戏,在运行中动态的创建对象,这自然就让我们联想到了反射。Unity开发的本质就是在Unity引擎的基础上利用反射和引擎提供的各种功能进行的拓展开发。游戏场景本质就是一个配置文件,在构建游戏场景时Unity原创 2021-03-01 16:03:06 · 434 阅读 · 4 评论 -
PureMVC总结
PureMVC总结个人总结图个人理解高清图下载请到:https://download.youkuaiyun.com/download/BraveRunTo/15491650原创 2021-02-27 16:04:41 · 180 阅读 · 0 评论 -
UnityUIMVC模式
UnityUIMVC模式传统MVCMVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。Model(模型) - 模型代表一个存取数据的对象。它也可以带有逻辑,在数据变化时通知控制器对View进行数据更新。View(视图) - 视图代表模型包含的数据的可视化。Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。MVC设计模式主要应用于游戏开发中的原创 2021-02-25 11:35:32 · 633 阅读 · 0 评论 -
Lambda闭包应用_无参Lambda中调用有参函数
Lambda闭包应用_无参Lambda中调用有参函数如果不使用Lambda表达式的闭包操作,在一个无参函数中调用有参函数,那么我们就需要在无参函数中为有参函数创建起需要的函数。但在一些情况下这种创建参数的代码往往是重复的。比如:我们想要在遍历UGUI控件的同时找到所有的Button并为他们添加点击事件这项需求,和我们想要在遍历UGUI控件的同时找到所有的Toggle并为他们添加值改变事件这项需求。同时为了区分不同的Button或Toggle我们需要一个参数来作为标识,比如不同Button的名字是不同的原创 2021-02-23 10:41:38 · 376 阅读 · 0 评论 -
C#如何在本类不声明泛型的前提下对一个成员字段/属性使用泛型集合
C#如何在本类不声明泛型的前提下对一个成员字段/属性使用泛型集合这种使用场景比较极端,但也比较常见。当本类继承单例模式基类后,由于单例基类本身需要子类传递一个泛型,这时的本类便无法在声明泛型了。但此时的我们又需要在类中声明泛型集合的成员。这种情况下我们使用以下操作来保证我们的成员可以使用泛型集合。//创建一个空接口,此接口会是成员的类型interface IInter{ }//创建一个泛型类继承自空接口class MyList<T> : IInter{ //此泛型原创 2021-02-20 22:03:49 · 382 阅读 · 1 评论 -
个人对C#委托的新理解
个人对C#委托的新理解在做完事件中心类之后,我对委托有了新的理解。下面我将从委托的声明,委托的调用和回调函数注册三个方面来谈谈我的理解。委托声明声明委托,其实就是一个派发委托的过程。当我们在一个类A中声明了一个委托时(声明委托分为声明签名,和声明委托两步),这个委托就可以被所有知道A类名的类注册,这里我们来举个形象的例子:我们假设类A是一个人,A的委托就是A公开出去的一个任务,所有知道A的人都知道这个任务的存在,并都可以去选择完成这个任务。当然也可以选择不管。当然做任务也不是随随便便就可以做的,做原创 2021-02-20 19:34:24 · 173 阅读 · 0 评论 -
Unity常用模块_公共Mono类
公共Mono类在Unity中,如果游戏运行时,游戏脚本中存在多个Update,这会造成一定的性能损耗,所以我们可以用一个公共Mono类来统一使用一个update。当然公共Mono的另一个作用就是在一个类不继承Mono的前提下使用unity提供的脚本生命周期和协程。公共Mono类在之后的一些模块中会经常用到,这里就先介绍公共Mono的代码书写。公共Mono类从本类可以看出,公共Mono的本质就是利用事件来使那些没有继承Mono的类使用unity的东西,当然只有这一个类的化,那这个类就没有那么神奇了。原创 2021-02-19 22:20:27 · 1190 阅读 · 0 评论 -
Unity常用模块_事件中心类
事件中心类事件中心类是一个集中处理事件/委托调用的类,其为单例类。简单来说就是平时我们使用委托回调时比如现在我要A类回调一个B类的函数,那么我就会在A类中声明一个委托D,直接在A类中调用;并在B类中为这个委托D注册回调函数。如果我们只需要这样少数的几次回调,且关联的类较少,那么不太能体现出事件中心类的价值。但是,一旦当我们的类需要大量回调函数时,如果不使用事件中心类就会造成类与类之间的强耦合如下图所示:且由于ClassA声明了大量的委托,这也会使ClassA看上去非常的臃肿。尤其是当我们制作一个游戏原创 2021-02-19 22:16:18 · 596 阅读 · 0 评论 -
通过GUI封装了解高级UI插件原理
通过GUI封装了解高级UI插件原理结果演示这里我将成品打包,下面是下载地址:https://download.youkuaiyun.com/download/BraveRunTo/15347380目的通过对Unity自带GUI的封装训练来更好的理解NGUI,UGUI的原理。需求分析我们需要提取所有控件的共性部分来实现封装。所有的控件都会含有一个位置信息Rect,一个内容信息GUIContent和样式信息GUIStyle(不填样式信息默认使用Unity的预设样式),所以我们对GUI的封装就是要封装这些共性原创 2021-02-18 11:18:48 · 319 阅读 · 0 评论 -
UnityGUI简介
UnityGUI简介GUI是什么?unityGUI全称:即使模式游戏用户交互界面(IMGUI)在Unity中一般简称为GUI,它是一个代码驱动的UI系统。GUI的主要作用作为程序员的调试工具,船舰游戏内调试工具。为脚本组件创建自定义监视面板。创建新的编辑器窗口和工具以拓展Unity本身(一般作为内置游戏工具)。注意:不用用IMGUI为玩家制作UI功能。GUI的工作原理Unity的GUI有自己的生命周期,在继承Monobehaviour的脚本中的特殊函数中在OnGUI函数中书写GUI相原创 2021-02-16 22:09:19 · 5440 阅读 · 1 评论 -
PlayerPrefs + 反射 = 一个简单的自定义类数据类型存储读取管理器
PlayerPrefsManager本文章只提供一种思路,思路来自于唐老狮课程,代码内聚性较高,待改进。using System;using System.Collections;using System.Reflection;using UnityEngine;/*Editor:RuntoVersion:1.0The last time for modification:2021.2.13Time for Creation:2021.2.13*/namespace demo{原创 2021-02-13 18:55:34 · 427 阅读 · 1 评论 -
数据持久化之PlayerPrefs
数据持久化之PlayerPrefsPlayerPrefs是Unity提供的一个数据持久化的解决方案。所谓数据持久化就是需要将内存中的数据转存到本地硬盘或服务器中,以此来达到数据保存。PlayerPrefs存储相关:PlayerPrefs的数据存储类似于键值对存储,一个值对应一个键。提供了存储3种数据的方法:int,float,string但注意,键类型只有string类型,值类型有int,float,string对应三种方法。PlayerPrefs.SetFloat("HP",hp);Pla原创 2021-02-12 20:31:26 · 555 阅读 · 0 评论 -
C#常用排序
C#常用排序插入排序public class BaseInsertSort{ /*插入排序 * 原理: * 1. 将一个数组分为两片区域排序区和非排序区,这两片区域使用索引来区分 * 2. 每次都取非排序区的首个元素和排序区的元素依次比较,直到索引值等于数组长度,即排序完毕。 * */ public static int[] Sort(params int[] array) { //数组的排序索引默认从1开始,原创 2021-02-11 16:09:02 · 858 阅读 · 1 评论 -
C#细节补充——进阶篇
简单数据结构ArrayList概念ArrayList是一个C#为我们封装好的一个类,它的本质是一个object数组。增Add:增加一个object类型。AddRange:增加一个ArrayList。删Remove:根据内容删除RemoveAt:根据索引值删除。Clear:清空。查查可以通过索引器实现。Contains:根据值查找。改改可以通过索引器实现。遍历foreach遍历。for遍历while遍历。StackStack是一个C#为我们封装好的类,本质是一个obj原创 2021-02-09 23:05:01 · 532 阅读 · 0 评论 -
C#细节补充——核心篇
构造函数构造函数构造函数的特殊写法,在构造函数后:this()调用其他重载构造函数,目的是实现代码的复用。析构函数语法:~类名{}作用:当引用类型的堆内存被回收时,会调用析构函数垃圾回收机制GCGC回收原理:C#在分配堆内存时会将堆内存划分为0代内存,1代内存,2代内存,除过83kb以上的对象直接存在2代内存中,其他对象都会优先存储在0代内存中。当代内存满后就会调用垃圾回收,执行逻辑为:查找可以回溯到调用处的所有对象并标记,清空未标记对象并将标记的对象移向下一代内存中。注意:原创 2021-02-06 21:55:25 · 171 阅读 · 0 评论 -
Unity学习日志_一个技能框架的学习和搭建流程总结
Day21_通过对一个技能框架学习之后的领悟制作框架的第一步就是要划分变化点,梳理业务逻辑,变化点划分清楚了,才有可能分类,业务逻辑清楚了才有可能梳理清各个模块之间的关系。明白一个技能从产生到释放都需要什么首先要明白的一点是,不同游戏类型对于技能的需求是不同的,这里以经典的MMORPG游戏为例:MMORPG类型意味着其技能数量是庞大的,且技能是要频繁修改数值和效果的,不同技能有不同的攻击范围,效果,释放等,这里我们可以提取三个变化点:技能与技能之间是不同的,所以不同技能不可以写在同一个类中。原创 2021-02-05 11:00:17 · 768 阅读 · 0 评论 -
Unity学习日志_对象池简介
Unity学习日志_对象池简介核心思想通过空间换取时间适用性当需要频繁创建/销毁游戏对象时使用对象池缓存对象。使用反射创建对象。数据结构使用字典,Dictionary<string,List>核心成员public GameObject CreateObject(参数列表){ //代替传统的Instaniate方法来创建游戏对象,在这里我们根据物体是否禁用来判断是否可以重新使用 在池中检查是否存在禁用的物体 { 如果有,返回对象;原创 2021-02-04 20:45:16 · 149 阅读 · 0 评论 -
关于Unity中类似Manager类的管理
关于Unity中类似Manager类的管理什么是类似Manager类?所谓类Manager类就是和Manager类相似的,拥有以下特征的类:在Unity脚本中唯一。在Unity脚本中经常被调用。如果不做任何改变任由Unity其他脚本调用Manager类或者类似Manager管理类会造成不必要的性能消耗。(大量的使用脚本搜寻方法)。这时的解决方案我们可以添加一个Instance属性,让其他脚本直接调用Instance属性。但是通常Unity中有不止一种Manager类。所以我们需要提取一个父类原创 2021-01-31 21:04:03 · 2491 阅读 · 0 评论 -
Unity学习日志_面向对象思想
Unity学习日志_面向对象思想面向对象的主要思想面向对象编程单元模型面向对象的思想(主要应用于做类,做方法,不管调用)分而治之:将一个大的需求拆分成若干的小类,每个类单独处理一个独立的模块。独立模块便于分工,便于复用,便于拓展。拆分的原则是只有一个变化点。封装变化:功能(行为)不同,功能不同的变化点最好只有一个,则应当封装成不同的类。产生变化的地方独立封装,避免影响其他模块。比如:行走,游泳,飞行都可以算是移动,但明显行为不同,这是就需要写3个类。高内聚:类的单一职责,指的是类原创 2021-01-31 18:25:47 · 516 阅读 · 0 评论 -
UML类图语法基础
UML类图语法基础文章参考https://blog.youkuaiyun.com/qq_43621698/article/details/104639291https://www.cnblogs.com/SanMaoSpace/p/5095395.html基础语法类(Class):类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为(前面的符号,‘+’ 表示public,‘-’ 表示private,“#’ 表示protected原创 2021-01-30 10:15:35 · 1580 阅读 · 0 评论 -
Unity学习日志_信息输入管理简介
Unity学习日志_信息输入管理简介Input类:鼠标输入:在桌面系统的游戏中,鼠标输入是最基本的输入方式之一。游戏中的许多操作都需要鼠标操作来完成。Input类中关于鼠标输入的静态变量:mousePosition鼠标当前的像素坐标位置(屏幕坐标系)。(只读)mousePresent指示是否检测到鼠标设备。mouseScrollDelta当前的鼠标滚动增量。(只读)Input类中关于鼠标输入的静态方法:GetAxis返回由 axisName 标识的虚原创 2021-01-25 16:48:41 · 382 阅读 · 0 评论 -
Unity学习日志_Android发布基础设置
Unity学习日志_Android发布基础设置使用Unity发布Android项目时,如果android平台的构建模块没有安装,可自行下载JDK和Android SDK。注意:2019之前的版本均需要自行下载,2019之后的版本包括2019可以在安装unity时选择捆绑安装对应的平台。关于JDK和AndroidSDK的下载安装问题下面文章做出了非常详细的整理,这里就不再整理了。https://blog.youkuaiyun.com/dxj467822057/article/details/801981651. A原创 2021-01-25 14:30:42 · 1036 阅读 · 1 评论 -
Unity学习日志_TimeLine
Unity学习日志_TimeLine1. TimeLine概述Unity的TimeLine可以创建电影内容、游戏序列、音频序列和复杂的粒子效果。用户使用TimeLine创建的每个剪辑场景、电影或游戏播放序列都包含TimeLine资源和TimeLine实例。TimeLine编辑器窗口可同时创建和修改TimeLine资源和TimeLine实例。1. TimeLine Asset时间线资源,存储Tracks、剪辑和录制的动画,不会链接到具体游戏对象上存在的动画。TimeLineAsset保存在Proje原创 2021-01-23 11:21:22 · 984 阅读 · 0 评论 -
Unity学习日志_车轮碰撞器简介
Unity学习日志_车轮碰撞器简介1. 简介:车轮碰撞器是一种针对地面车辆的特殊碰撞体。他有内置的碰撞检测、车轮物理系统和有滑胎摩擦的参考体。除了车轮,该碰撞体也可以用于其他游戏对象。属性:Mass:车轮质量。Radius:车轮半径。Wheel Damping Rate:车轮阻尼率。Suspension Distance:悬挂距离,可以理解为悬挂弹簧的长度。Force App point Distance:Center:用于设置车轮碰撞体在对象局部坐标中的位置。Suspension原创 2021-01-21 19:48:16 · 2554 阅读 · 1 评论 -
Unity学习日志_全局光照GI系统简介
Unity学习日志_GI系统简介1. 何为GI?全局光照,简称为GI,是一个用来模拟光的互动和反弹等复杂行为的算法。要精确的仿真全局光照非常的具有挑战性,付出的代价也很高,正因如此,现代游戏会在一定程度上预先处理这些计算,而非在游戏运行时实时计算。Unity的全局光照系统分为Enlighten和Progressive Lightmapper,两者之间可以通过lighting窗口进行切换。在Unity的5.6版本之前的5.x中,主要使用了Geomerics公司的Enlighten来提供实时全局照明以原创 2021-01-20 16:42:46 · 2376 阅读 · 0 评论 -
Unity学习日志_寻路系统简介
Unity学习日志_寻路系统简介基础寻路系统(Unity自带的)需要先将地形设置为静态后才可以进行网格烘焙。Navigation视图:1. Object:Scene Filter:选择要进行烘焙的物体类型。All(可以烘焙所有物体),Mesh Renderers(只可以烘焙带有Renderer的物体),Terrains(只可以烘焙地形)。Navagation Static:上面为当前选中物体的名字,此项为设置此物体为导航静态(可烘焙)Generate OffMeshLinks:当勾选此属性后原创 2021-01-18 18:17:08 · 845 阅读 · 0 评论 -
Unity学习日志_动画系统简介
Unity学习日志_动画系统简介Animation,Legacy动画系统若要使用Animation,需要在创建Clip之前为物体手动添加Animation组件。Animation组件面板:属性:Animation:动画片段。Animations:片段数组。Play Automatically:自动播放。Animate Phsics:如果设为true,那么动画将会在 FixedUpdate 中循环,这个只有和运动学刚体一起用才有效。Culling Type:分为总是播放(Always A原创 2021-01-17 12:06:47 · 2137 阅读 · 1 评论 -
Unity学习日志_NGUI背包系统基本功能实现
Unity学习日志_背包系统基本功能实现功能展示:1. 拖拽:2. 不同物体交换:3. 相同物体叠加:背包界面搭建:1. 整体层级逻辑:2. 细节:关于BackPack:使用了Scroll View脚本,便于背包的上下滑动关于BackPackBackground:使用了Grid脚本来实现自动布局关于Cell:使用的BackPackCellTest脚本继承于UIDragScrollView关于Items:使用的BackPackTest脚本继承于U原创 2021-01-14 22:56:21 · 368 阅读 · 1 评论 -
Unity学习日志_NGUI简介
Unity学习日志_NGUI简介NGUI仅支持相机模式。UIRootUIRoot类似于UGUI中Canvas的UI Scaler组件,负责缩放模式调节。属性:Scalling Style:Flexible:旧版本叫PixelPerfect,指永远保持图片自身像素大小不变。适合PCConstrained:旧版本叫FixedSize,永远保持图片在Panel中的比例不变。适合手机ConstrainedOnMobiles:前两种的集合体。UIPanelUIPanel类似于UGUI中原创 2021-01-13 21:19:15 · 2426 阅读 · 0 评论