Unity之Mesh网格
引言: 本笔记为各方资料整理,如有侵权请联系 UnityMesh网格编程一、创建一个简单的网格1.渲染事物 在 Unity 中,如果你想将某些内容可视化,可以使用网格。它可以是从其他程序导出的 3D 模型,也可以是程序生成的网格,还可以是精灵图、UI 元素或粒子系统,这些 Unity 也使用网格来实现。甚至屏幕效果也使用网格进行渲染。 那么,什么是网格?? 一组3D空间点+一组连接点的三角形(这些三角形构成了网格所代表内容的表面。) 由于三角形是平面的,且边缘笔直,因此它们可以用来完美地呈现平面和直线的物体,例如立方体的面。曲面或圆形表面只能通过使用许多小三角形来近似。如果三角形看起来足够小(不大于一个像素),那么您将无法察觉到这种近似。通常,这对于实时性能来说是不可行的,因此表面总会呈现出某种程度的锯齿状。 图1 Unity默认立方体以及线宽(能看到锯齿) ...
Shader实战案例
注:本系列为shader实战的精品案例,这些是必须要掌握的 Shader实战案例一、UV扰动之水纹效果 思路:利用噪声图信息偏移主UV图坐标,形成扰动效果。利用_Time平移顶点实现动画效果_,使扭曲纹理看起来在 X 和 Y 方向上滚动。 准备一张水面图,一张噪声图,噪声图可以看老唐shader,会讲如何制作。 效果图: 下面将一些:前置的知识点。 1.什么是噪声 它的本质是一种由数学算法公式生成的有规则性或可控的随机数据。 特性: 随机性:噪声数据本质上是随机的,这意味着它具有不规则性,无法通过简单的模式预测 平滑性:数据不会突然跳跃或变化,而是呈现出逐渐过渡的效果,适合模拟自然现象 周期性:随着坐标的变化,噪声值会重复出现,形成一个封闭的循环。也可以通过调整噪声的范围或修 改算法来避免 可调性:大多数噪声算法的输出是可以调整的,这种可调性允许你根据需求灵活地控制噪声的表现,适 应不同的视觉效果或逻辑处理需求 5....
多媒体技术基础
一些术语的简单介绍,比如采样,离散等等。 注:此文中所有关于声音处理的采样压缩对于图片同样适用。 第一章 多媒体概要第一节 多媒体技术概要一、 多媒体是什么? 多媒体是融合两种或两种以上媒体的人机互动的信息交流和传播媒体 媒体的种类: 文图声像画 注:多媒体信息是以数字形式而不是以模拟信号形式存储或传输的。 如考到多媒体,这上述三点全答 二、超文本、超链接和超媒体 超文本是什么 包含指向其他文档或文档元素的指针的电子文档。 超链接是什么 两个对象或两个元素之间的定向逻辑链接。 超链接实际上是一个对象指向另一个对象的指针。 超媒体是什么 包含指向文图声像画文档或文档元素的指针的电子文档。 超媒体的应用:Web(万维网),PPT,PDF 三、多媒体的层次结构 基础层 计算机结构 系统层 驱动程序和操作系统 服务层 数据处理传输 应用层 用户接口,教学,API设计。 第二节 多媒体数据压缩与编码一、数据压缩与编码 数据压缩...
实战中的问题
实战中的问题一、人物为什么没有动画情况下是张开双臂的状态 答案:建模时要绑定骨骼,四肢要明确反映出来,具体到底是头躯干还是腿,默认使用T字模型。 二、速通新InputSystem1.InputSystem是什么 绑定—》按下—》开始、触发、结束三个事件 2.Action参数 3.输入动作设置 4. 相互作用设置 5.值加工设置 6.按键绑定 7.InputAction类使用(1)启用输入检测 委托变量.Enable(); (2)操作监听 三个基本事件 监听函数 使用CallbackContext获取信息CallbackContext context参数包含了触发动作的所有信息。你可以使用这个上下文来访问更多细节,例如: context.ReadValue<float>(): 获取输入值(例如,对于键盘按键或手柄按钮)。 context.control: 获取触发该动作的输入控件。 context.interaction: 获取当前交互类型(例如,是否为按下、释放等)。 context.phase:...
渲染管线基础
该内容基于Games101课程,内容可能有些杂乱,后续会详细整理。建议学习shader之前要看过一遍101 渲染管线基础 所谓渲染就是把三维空间的物体变成一张图 具体绘制流程如下: 模型空间变换到世界空间 世界空间变换到观察空间 观察空间变换到屏幕空间 拿到屏幕空间对应映射的位置后,进行光栅化绘制像素 一、线性代数入门1.向量(Vectors) 向量最重要的两个属性:方向和大小 单位向量:向量本身/长度 得到和原始向量同方向长度为1的向量 向量求和 笛卡尔坐标系描述向量,默认向量一个一个往下写(列向量) 向量点乘 为 a长度 * b长度 * 夹角余弦 点乘可以得到向量之间的夹角 单位向量点乘,就是夹角余弦 点乘运算法则 点乘作用:得到夹角和投影 投影:比如b投影在a上,那么一定是沿着a的。所以b的投影向量 = K*a的单位向量 投影作用:将一个向量分解成两个向量。 点乘判断前后 主要是因为cosθ的值影响正负 如果点乘结果>0 锐角 前方 ...
Lua进阶
Lua进阶1. ipairs和pairs的区别 使用ipairs遍历时:下标不是数字或者不是递增数字(断了),遍历就会直接结束 使用pairs遍历时:直接不管什么都能遍历,很可靠。 正常情况下遍历,没有任何区别 12345678910111213141516171819202122local tbl1 = { "apple", "pear", "orange", "grape" }print("=============ipairs的执行结果=============")for i, v in ipairs(tbl1) do print(i, '=', v)endprint("=============pairs的执行结果==============")for i, v in pairs(tbl1) do print(i, '=',...
Lua基础
Lua基础Lua 教程 | 菜鸟教程(https://www.runoob.com/lua/lua-tutorial.html) 嫌啰嗦可以看这个 一、简单变量 分为:nil,number,string,boolean。 1.变量申明 lua中所有的变量申明,都不需要申明变量类型,它会自动判断类型。而且可以随便赋值。 1a=1 2.nil nil 类似于C#中的null,空的概念,也等同于false 123a=nilprint(a)--打印结果为nil 3.number 所有的数值都是number。默认只有一种double类型 12345a=1print(a)a=1.2print(a)--打印结果为:1 1.2 4.string 字符串的声明 使用单引号或者双引号,都能声明。 lua中没有char 12a='123'print(a) 5. boolean 包含两个值false和true。 123a=trueprint(a)--打印结果为:true 6.如何得到变量类型 通过type函数 ...
高频算法30讲
高频算法三十讲一、反转链表 思路:定义三个节点指针,cur,tmp,pre。断后,连前,移节点。 cur:指向头节点 tmp:指向头节点的下一节点 pre:方向节点 以cur断开原本next,从而指向pre方向,再向前移动pr和cur实现方向反转。 tmp=cur->next; tmp始终都在cur后面,以方便后面cur移动节点 cur->next=pre; 改变链表方向 pre=cur; cur=tmp; 节点移动 while循环遍历直到cur为null。 二、轮转数组 123456789101112class Solution {public: void rotate(vector<int>& nums, int k) { int n=nums.size(); vector<int> numArry(n); for(int i=0;i<n;i++) ...
数据可持久化之JSON
一、JsonUtility 1. 什么是JsonUtility JsonUtiUtlity是Unity自带的用于解析JSON的公共类。 1.将内存中对象序列化成为Json格式的字符串。 2.将Json字符串反序列化为类对象。 2. 在文件中存读字符串 (1) 存储字符串到指定路径文件中 1File.WritellText(Application.persistentDataPath+"Test.json","wqx存储的json文件")l; ①第一个参数:存储路径。 ②第二个参数:存储的字符串的内容。 注:文件不存在,可以自己自动创建。但是不能创建文件夹,路径有未创建的文件夹会报错 (2) 在指定路径文件中读取字符串 1string str = File.ReadAllText(路径同上); 3. JsonUtility序列化 序列化:把内容中的数据存储在硬盘上。 ...
生命周期函数
一、帧的概念 游戏的本质就是一个死循环,每一次循环处理游戏逻辑就会更新一次画面,之所以能看到画面在动,是因为切换画面的速度达到一定时,人眼就认为画面是流畅的。 一帧就是执行一次循环 个人多年游玩游戏来说,我最低只能接收60帧,不然会头晕。 Unity底层已经帮助我们做好了死循环,我们需要学习Unity的生命周期函数,利用它们做好规则来执行我们的游戏逻辑就行了。 二、生命周期函数的概念 所有继承MonoBehavior的脚本 最终都会挂载到Game Object上。 生命周期函数 就是该脚本依附的GameObject对象从出生到消亡整个生命周期中会通过反射自动调用的一些特殊函数。 Unity帮助我们记录了一个GameObject对象依附了哪些脚本。Unity会自动的得到这些GameObject对象,通过反射去执行一些固定名字的函数。 三、生命周期函数 注:生命周期函数的访问修饰符一般为private和protected 。 注:因为不需要外部去调用生命周期函数,都是Unity自己帮助我们调用的。 1. Awake 当对象(自己这个脚本类对象)被...