热更新(c#对于lua的调用)
对于lua的简单调用123456789101112131415161718192021222324252627282930313233343536373839using System.Collections;using System.Collections.Generic;using UnityEngine;using XLua;//引用命名空间public class CsCallLua : MonoBehaviour{ // Start is called before the first frame update void Start() { //Lua解析器 能够让我们在unity中执行lua //一遍情况下保持他的唯一性 LuaEnv env = new LuaEnv(); //执行Lua语言 env.DoString("print('Hello World')","CsCallLua"); ...
关于AB包
什么是AB包,它的主要作用是什么?AB包全名AssetBundle(资源包)。是一种Unity提供的用于存放资源的包。通过将资源分布在不同的AB包中可以最大程度地减少运行时的内存压力,并且可以有选择地加载内容。(直白点讲就是对内存有优化)。ab包主要用来热更新(你问什么是热更?这个我们一会再说,往下看)。相比于Resources加载,ab包加载对于内存的负担更小,而且更加快速。
unity资源加载的俩种方式在Unity中,一般来说,资源加载方式主要分为Resources加载和AssetBundle加载。Unity有个特殊文件夹Resources,放在这个文件夹下的资源可以通过Resources.Load()来直接加载。即Resources加载资源方式。当获得AssetBundle之后,也可以调用AssetBundle对应的API来加载资源。
热更新游戏或者软件更新时,无需重新下周客户端进行安装,而是在应用程序启动的情况下,在内部进行的资源或者代码更新。说白点你甚至可以在玩家游玩的时候修改一些代码或者美术资源。等玩家下次更新以后就会完全变成另外一款游戏。
ab包的安装这个就不细说了。
a ...
初识lua语言续
复杂的数据类型终于到了这个折磨人的地方了,这里也是最能表现lua的灵活性和不严谨性的地方
123456789101112131415161718192021222324252627282930313233343536373839404142434445print("*********复杂数据类型 table************")--所有额复杂类型都是table (表)print("*********数组************")a ={1,2,3,4,5,6,7,nil,"123"};--lua中的索引从1开始print(a[1]);print(#a); -- #是通用获取长度的关键字-- 在打印长度的时候 空被忽略了//之前的版本print("*********数组的遍历************")for i = 1,#a do print(a[i])endprint("*********二位数组************")a={ { ...
初识lua语言
什么是Lua,它时用来干什么的?lua语言是一门十分小巧的语言。他的优势是在于十分的小巧和灵活。单也是正式因为这种灵活,导致lua有很多地方的逻辑不尽严谨。Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。
LUA语言的各种方法我们先从最简单注释和学习代码最常用的一句话(HELLO WORLD)开始。lua的注释和c++,c#等不是//这点要注意,我们直接来看代码会直观一点。
12345678910111213141516171819print("HELLO WORLD");print("lua语言的学习");--这是注释哦--[[这不和c#玩全不一样嘛!!!再来一行]]--[[这不和c#玩全不一样嘛!!!再来一行]]----[[这不和c#玩全不一样嘛!!!再来一行--]]
既然作为一种语言,各种变量肯定是必不可少的。我们先从一些简单的入手, ...
Shader光照
Shader语法基础在写光照的语法之前,我们应该知道shader内部的运行函数,以及运行的顺序是什么。看代码:
12345678910111213141516171819202122Shader “MyShader/Shader1”{ //这里我们需要设置你渲染时需要的各种属性 //shader属性会出现在关联材质球的选项里面 Properties{ } //subshader其实应该分成俩部分,一部分是给显卡足够高级的用户另一部分则是为了满足 // 显卡不是那么高级用户的 SubShader{ // *pass通道与subshader的执行方式有着很大的不同,subshader只会执行一次, //但是每有一个pass通道则会执行一次且从上到下依次执行 Pass{ CGPROGRAM //do something ENDCG } //如果所有的subshader都执行失败,则最终执行fallbac ...
Unity自定义面板
1.通常unity给我们的面板我们不需要去在进行修改了,但是如果需要开发定制的工具和插件。那么就需要扩展属性面板来完成需求。这篇文章将会简单的去了解并且使用inspector进行介绍。2.上代码 ps:这里为了方便理解使用了中文命名,实际项目中切记使用标准的命名方式
1234567891011121314151617181920212223242526272829303132333435using UnityEngine;using UnityEditor;public class Unity自定义面板 : EditorWindow{ [MenuItem("自定义菜单/测试用窗口")] static void 菜单被按下() { 创建窗口(); } static Unity自定义面板() { 创建窗口(); } static void 创建窗口() { //生成窗口 将true改为false则可以将窗口吸附到u ...
A*算法的具体实现
上次简单的介绍完了A* 的应用场景。那么这次我们来介绍A* 的具体实现方法。
1.了解A* 寻路的基本原理A* 寻路算法的基本原理就是不停的寻找自己周围的点,选出一个新的点作为下一次的起点,然后再次重复上面的步骤,直到找到终点为止
2.了解A* 寻路的详细原理1.A* 的寻路消耗公式 f(寻路消耗) = g(离起点的距离) + h(离终点的距离)2.开启列表 将起始点的周围的点计算并且加入到开启列表当中,但是每次从新的点找周围的点时,如果周围的点已经在开启列表或者关闭列表中了,我们就不去管他了。并且将这些点中父级相同的点中消耗最小的点加入到关闭列表当中3.关闭列表 每次往关闭列表中放点时,我们都应该判断这个点是不是和终点一样。如果是一样的则证明路径已经找到。如果不一样,则继续找4.格子对象的父对象 当我们已经找到终点的时候,我们就可以通过回溯这些点的父对象的坐标的方法,来找出一条路径。
3.具体实现A星算法我们先来实现格子类
123456789101112131415161718192021222324252627282930313233343536373839 ...
初步接触Shader和Shader的渲染流程
什么是shader?Shader其实就是专门用来渲染图形的一种技术,通过shader,我们可以自定义显卡渲染画面的算法,使画面达到我们想要的效果。小到每一个像素点,大到整个屏幕。
什么是渲染流水线渲染管道也称为渲染流水线,就是CPU准备一些数据,然后告诉GPU渲染出一个二维的图像过程。 渲染管道的三个阶段:应用程序阶段,几何阶段,光栅化阶段1.应用阶段(CPU)主要就是CPU将硬盘中的数据加载后,和内存进行通讯,将需要显示的数据信息(顶点数据,纹理坐标,法线信息),传递给GPU处理2.几何阶段(GPU)几何阶段最重要的工作就是“变换三维顶点坐标”,变换的工作由矩阵运算完成。
空间 模型空间:3D物体的原始坐标,存储在模型中。 世界空间:物体放在场景中,才能构成整个游戏场景 观察空间:需要以相机为原点的3维空间 裁剪空间:物体是否在相机的渲染范围内 屏幕空间:3D物体,投影到屏幕上物体最终显示:需要GPU进行一系列的矩阵运算,将模型空间下的网格顶点,转换到屏间下(转换点的过程是并行)非模型网格顶点信息中记录的点, ...
三种算法的区别及优缺点
如何在复杂的地形上通过最低成本,来计算俩点之间的最短路径。如果在路径上突然出现障碍物怎么办。每个路径的搜索算法之间又有什么样的区别。什么样的情况应该使用什么样的算法。
Unity NavMesh System首先是untiy自带的NavMesh系统。
适合的类型游戏和地图Nav适合自由探索类游戏。很多大型连接地图(支持地图的空间跳跃)
优点Nav算法的路径查找速度非常快而且需要的代码量很少。只需要在对应该的物体上添加Nav的相关组件即可。而我们也可通过组件内的设置来设定无法行走的区域。
缺点但是这个区域是需要玩家在改变地图后去手动点击烘焙按钮,来进行重新烘焙,无法做到及时演算。
BFS(广度优先搜索算法)宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。
适合的类型游戏和地图BFS更加的适合于那些[离散式的网格布局]的地图游戏(格子类,横纵分明),如塔防类游戏。
优点需要调整的参数较少,并且可以拥有多个目标点。当我们完成这个算法以后,可以直接当做工具来进行使用并且需要的代码也比较少。
缺点和Nav一样,BFS一但确定了路径就不会在进行 ...
对于敌人AI的简单理解和FSM的介绍
敌人AI有什么用:AI是由预先设置好的程序来模拟出智能行为,玩家逐步了解,并且学习AI行为的过程也是游戏的乐趣之一。游戏也可以根据AI的复杂程度来进行难度的划分。那么如何去写一个AI呢?最经典的就是if else大法,但是这种写法会导致代码可读性降低。还有有限状态机(FSM)和行为树。今天我们就来简单的聊聊通过接口和字典来实现FSM的写法。
什么是有限状态机?有限状态机(Finite State Machine, FSM),又称有限状态自动机,简称状态机,是指在有限个状态之间按照一定规律转换。
代码123456789//我们首先来写一个接口的函数,我们讲通过这个函数来实现进入状态,状态中,和退出状态。public interface IState{ void OnEnter(); void OnUpdate(); void OnExit();}
然后是状态机的本体代码,在这里我们将通过字典来储存状态,并且通过对应该的关键字来查找和切换状态
123456789101112131415161718192021222324252627282930313233 ...