自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 问答 (4)
  • 收藏
  • 关注

原创 【Unity动画系统】动画层级(Animation Layer)讲解与使用

新键一个层级,有些工程中我们需要将某个层级的复制下来然后修改。可以直接使用同步Sync,打勾后选择与哪个层级同步。虽然同步了,但是动画内容都是空的,需要自行添加,blendertree需要选择Create new BlendTree in State。选择受伤过后的动画加入新的混合树,同样选择以什么方向为计算。比如打架的行走是普通走路的60%。3.5是行走混合树的阈值,这里乘以60%然后除以现在的阈值。新阈值3.5 * 0.6 / 1.737//用来保存动画层的序号。

2024-05-06 15:19:02 1367

原创 【Unity动画系统】详解Root Motion动画在Unity中的应用(二)

Root Motion最主要是解决动画,而不是位移,那么我们应该把移动的控制权从root Motion中拿回来(RigidBody主要用来模拟各种物理计算)。private void OnAnimatorMove(){ //启用后Unity不再用直接用Root Motion来驱动游戏对象,调用时间在FixedUpdate和动画系统的各回调方法之后,物理引擎计算之前Move();//如果希望精准运动的话,就将currentSpeed赋值给rig,不过这里动画和移动可能会有细微不同步。

2024-04-28 14:39:58 1347 2

原创 【Unity动画系统】详解Root Motion动画在Unity中的应用(一)

什么时候勾选Bake into pose,当不希望动画带动游戏对象旋转时。在旋转的动画中一般是不用勾选的,因为就需要用它来带动我们的角色对象旋转。但在比如前进、后退、待机等动画来说,我们就可以勾选这里,以避免因动画文件本身的瑕疵而给我们带来的旋转。loop match:代表了这个动画在角度上的吻合度。如果这个动画在播放中转角过大,那么就会显示红色,告诉我们如果勾选bake into pose,则会带来不好的效果。

2024-04-27 23:09:54 2067 1

原创 【Unity动画系统】动画状态转换详解

进入下一个动画的偏移量,就是修改过渡后的动画的进入位置,和Exit Time的原理类似,0.5从下一个动画的中间开始播放。都勾选了,哪个转换条件先满足,就先执行哪个转换;后只有当转换的条件优先级大于当前动画转换的优先级时才可以打断当前动画;不勾选则需要添加转换条件,否则此转换永远不会被执行。0则开始就播放转换视频,1则播放完才转换,1.5则播放完后,再播放一半才转换。:是指转换的过渡时间是按秒计算还是按百分比来计算,勾选则是按秒。:勾选上面的Has Exit Time,则会开启这个箭头。

2024-04-27 15:58:06 802 1

原创 【Unity动画系统】动画状态基本属性与相关API、IK简单概述

由屁股到末梢骨骼节点依次计算其旋转位移和缩放来决定每一块骨骼的最终位置来决定每一块骨骼的这种被称为正向动力学。:通过部位的位置反向计算它们的各个父节点的旋转位移和缩放。

2024-04-27 13:48:40 982 1

原创 【Unity动画系统】Animator组件的属性

和Normal一样,都是与Update同步刷新,但是会忽视TimeScale时间标尺。比如默认情况下是1,如果我们设置为0.5,那么整个游戏的运行就会比正常情况下慢百分之五十;就重新计算一个骨骼节点的相关数值,如果角色动画需要与物理系统交互,如手感要求很高的ACT游戏,那么就需要在角色手上绑定一些相应的碰撞体之类的。:和帧率同步,与Update同步刷新,每刷新一遍画面,就重新计算一下每个骨骼节点的相关数值,120FPS,那么就计算120次。:剔除模式,当物体没有被对象看到时,该怎么做。

2024-04-26 20:00:31 291

原创 【Unity动画系统】动画基本原理与Avater骨骼复用

优化游戏对象,当使用了Avatar之后,播放动画就与模型文件上的骨骼无关了,动画就会从Avatar骨骼上读取信息,选中的话,模型上的骨骼就会被删除掉。要在B上复用,就得通过B的Avatar文件把动画文件中对肌肉拉伸的描述翻译成对B模型骨骼变化的描述,这样动画文件就可以在B上进行了。:从这个模型本省创建avatar,根据模型a的骨骼建立一个与Unity肌肉对应的关系。点击Apply,就从对A模型骨骼的描述,改变为了对Unity肌肉的描述。将A的骨骼节点的描述转化为Unity肌肉的拉伸程度文本。

2024-04-26 19:55:25 1220

原创 【Lua语法】字符串

【代码】【Lua语法】字符串。

2023-10-22 14:10:43 662

原创 【UE虚幻引擎】UE源码版编译、Andorid配置、打包

设置虚幻的Android SDK和NDK | 虚幻引擎文档 (unrealengine.com)在项目设置中-》渲染-》勾选扩展自动曝光设置中的默认亮度范围即可我的Android Studio配置:然后打包成功!要勾选Package game data inside .apk?将Apk包装载到手机上即可

2023-09-13 22:32:56 644

原创 【Unity-Cinemachine相机】虚拟相机旋转Composer属性详解

Look At和Aim本质是控制虚拟相机自身的旋转,并不一定非要看着,或者并不一定非要瞄着这里的游戏对象Look At和Aim是以Look At里面的对象作为参考来旋转自身Do nothing:表现出来的行为和Look At空出来一样Composer:是一个标准的瞄准模式,可以用下面的模式来保证相机看向游戏对象打开Game Window Guides当中的黄点指的就是Look At游戏对像的位置Offset:偏移量,也就是相机瞄准的位置,是否要在对象的位置的基础上做一定量

2023-09-05 10:25:58 1432

原创 【Unity-Cinemachine相机】相机跟随之Transposer属性

这里所有的旋转都不是指虚拟相机自身的旋转而是绕着Follow目标的旋转。

2023-09-05 10:21:15 768

原创 【Unity-Cinemachine相机】虚拟相机(Virtual Camera)的本质与基本属性

我们可以在游戏进行时修改各个属性,但在概念上,最好将Virtual Camera 当作一种相机行为的“配置文件”,而不是一个组件。我们的相机有几种行为就为它准备几种虚拟相机,比如角色移动就为它第三人称相机,瞄准就准备一个第一人称相机,过程动画就准备固定机位相机或滑轨相机。

2023-08-31 20:29:34 7732

原创 【Unity-Cinemachine相机】Cinemachine Brain属性详解

在Package Manager中下载Cinemachine创建一个Virtual Camera,然后会发现Main Camera后面多出了个标志,而且属性也不能再修改了因为绑定了CinemachineBrain,它会读取场景中某个虚拟相机的配置,并以此配置来控制相机的行为,如果要修改相机视野、位置之类的属性,必须到虚拟相机这里修改可以在场景中定义任意数量的虚拟相机,并随时在这些虚拟相机之间切换Fixed Update:就是与物理引擎同步Late Update:就是与画面绘制同步Smart Update:就

2023-08-31 00:17:40 1434

原创 【Unity编辑器】拓展Hierarchy视图

菜单中已经包含了系统默认的一些菜单项,我们拓展的原理就是重写MenuItem的自定义路径。EditorUtility.DisplayPopupMenu用于弹出自定义菜单,Event.current.Use()的含义是不再执行原有的操作,所以就实现了重写菜单。选择不同的游戏对象后,在右侧可根据EditorGUI拓展出一组按钮,点击Unity图标后,在Console窗口中输入这个游戏对象。当监听到鼠标抬起的事件后,并且满足游戏对象的选中状态,开始执行自定义事件。工作原理:监听点击的事件,打开一个新的菜单窗口。

2023-05-04 20:54:23 932

原创 【Unity编辑器】拓展Inspector视图

编辑情况下的代码可能会出现问题。比如DestroyImme(this)删除自己的代码时,会触发引擎底层的一个错误,不过可以用UnityEditor.EditorApplication.delayCall来延迟一帧调用。Unity大量的Editor绘制方法封装在内部DLL文件里,开发者无法调用它的方法。可以使用C#反射的方式调用内部未公开的方法。通过反射先得到UnityEditor.TransformInspector对象,然后就可以调用它内部的OnInspectorGUI()方法。

2023-05-04 20:46:54 1397

原创 【Unity编辑器】拓展Project视图

Project资源比较多,如果不好好规划,资源就会很凌乱。这时就要借助程序来管理资源,可以通过监听资源的创建、删除、移动和保存等事件来实现。例如:将某个文件移动到错误的目录下,此时就可以监听资源移动事件,程序判断资源的原始位置以及将要移动的位置是否合法,从而决定是否能阻止本次移动。首先需要继承UnityEditor.AssetModificationProcessor,接着重写监听资源创建、删除、保存和移动的方法。

2023-05-04 20:34:16 632

原创 【Leetcode刷题】141、环形链表

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。利用无序哈希表存入每次不同的节点,并判断此节点没有重复计数过,那么就没有环;输入:head = [3,2,0,-4], pos = 1。给你一个链表的头节点 head ,判断链表中是否有环。,则返回 true。解释:链表中有一个环,其尾部连接到第二个节点。解释:链表中有一个环,其尾部连接到第一个节点。解释:链表中没有环。

2023-01-26 01:11:56 1027

原创 【设计模式】软件开发原则

客户端不应该依赖那些它不需要的接口。一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。

2022-12-26 22:43:42 341

原创 【Unity篇】Unity入门介绍

Scene 场景编辑 窗口Game 游戏运行 窗口Hierarchy 场景物体 列表窗口Project 项目资源 列表窗口Inspector 属性编辑 列表窗口其他常用调节窗口。

2022-12-26 22:00:20 1888 1

原创 【计算机网络】三次握手与四次挥手(过程详解)

第一次握手:向TCP服务器进程发送TCP连接请求报文段,进入同步已发送状态。TCP连接请求报文段首部中的同步位SYN被设置为1,表明这是一个TCP连接请求报文段,序号字段seq被设置了一个初始值x,作为TCP客户进程所选择的初始序号。

2022-09-12 22:44:34 5254

原创 【3D数学基础】笛卡尔坐标系统

就是小时候学过的数轴概念3D虚拟世界的设计也是与现实世界相同的,要处理的是一系列离散和有限的事物,可以使用C++提供的多种数据类型来描述3D虚拟世界,包括short、int、float和double。这些数据类型都是离散的。我们上课学的坐标轴都是笛卡尔坐标系。但是这种说法对3D坐标系是不成立的。坐标系是一个精确定位点的框架。坐标的每一个分量都表达了该点与原点之间的距离和方位。确切地说,每个分量都是到相应轴的有符号距离在3D中定位一个点需要3个数:x、y和z,分别代表该点到yz、xz和xy平面的有符号距离全

2022-06-19 20:11:36 941

原创 【leetcode刷题】27、移除元素(C++)

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝int len = re

2022-06-10 11:02:13 105

原创 【leetcode刷题】26、删除有序数组中的重复项(C++)

原题地址:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个

2022-06-10 11:00:33 132

原创 【LeetCode刷题】94、二叉树的中序遍历(C++)

94、二叉树的中序遍历原题连接:https://leetcode.cn/problems/binary-tree-inorder-traversal/问题描述:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <

2022-05-10 22:56:48 252

原创 Go语言基础【函数】

函数定义一个函数func 函数名(形参列表)(返回列表){函数体}函数有以下几种定义方式:第一种:func 函数名字(){...}第二种:func 函数名字() 返回值{...return 返回值}第三种func 函数名字(参数列表){...}第四种func 函数名字(参数列表)返回值{...return 返回值}传递数组数组是按值传递的,当调用一个函数时,每个传入的参数都会先创建一个副本,再赋值给对应的函数变量,所以函数接收的是一个副

2022-05-10 21:30:48 153

原创 Go语言基础(一)

Go语言具有支持高并发、语法简洁等特点变量Go语言中变量的定义可以直接定义,不需要基本数据类型,这些会自动帮你定义。但是你也可以写出变量的类型,放在变量的后面。还有一种是直接使用 := 来定义变量var a = "initial" var b, c int = 1, 2 var d = true var e float64 f := float32(e) g := a + "foo" fmt.Println(a, b, c, d, e, f) // initial 1 2 tr

2022-05-09 20:46:16 242

原创 【leetcode刷题】--- 21.合并两个有序链表(C++递归)

21.合并两个有序链表原题链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的

2022-04-25 22:06:10 208

原创 【leetcode刷题】-- 704、二分查找(C++实现)

原题链接:https://leetcode-cn.com/problems/binary-search/submissions/题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,

2022-04-21 22:42:02 551 2

原创 【leetcode刷题】-- 14.最长公共前缀(C++纵向实现)

leetcode – 14.最长公共前缀原题地址:https://leetcode-cn.com/problems/longest-common-prefix/submissions/题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,“flow”,“flight”]输出:“fl”示例 2:输入:strs = [“dog”,“racecar”,“car”]输出:“”解释:输入不存在公共前缀。提

2022-04-20 22:49:36 199

原创 C++中 指针的指针是什么?指针的引用又是什么?你可能需要看看这篇文章

关于变量的定义我们都知道变量的定义包括一个基本数据类型(base type)和一组声明符,在同一条定义语句中,输入基本数据类型不同,但是声明符的形式却可以不同。//如:i是一个int的整数,a是一个int型的指针,b是一个int型的引用int i = 0 , *a = i , &b = i;我们不需要太在意基本数据类型和类型修饰符的关系,后者只不过是前者声明符的一部分罢了。定义多个变量有很多人认为类型修饰符(如&和*)在定义中会作用于全部的函数,就是一次定义,一句中所有的变

2022-04-19 20:38:05 801

原创 【leetcode刷题】-- 821.字符的最短距离(C++暴力)

字符的最短距离原题链接:https://leetcode-cn.com/problems/shortest-distance-to-a-character/submissions/题目:给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其

2022-04-19 15:45:29 522

原创 【leetcode刷题】-- 回文数(C++反转数组解法)

leetcode刷题–9.回文数题目链接:(https://leetcode-cn.com/problems/palindrome-number/)给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为

2022-04-18 20:24:12 387

原创 数据结构-栈的顺序存储结构(C++实现)

目录1、声明栈的结构体2、初始化栈顶3、添加元素至栈顶4、删除栈顶元素5、显示栈整段代码1、声明栈的结构体结构体内声明一个data用来存放栈数据;top用来指向栈顶;typedef int ElemType;typedef struct{ ElemType data[MAXSIZE]; int top;}SqStack;2、初始化栈顶因为栈是从0开始存储的,所有一开始最好将指针top指向-1void Length(

2022-04-07 13:04:48 2330

原创 是不是还对单链表无从下手?教你简单的单链表创建(C++)

1、声明结构体结构体内声明一个存储数据的data;然后声明一个指针;typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;}Node;typedef struct Node LinkList;2、创建链表(尾插法)LinkList * CreateList(int n ,LinkList *L) { //尾插法创建链表 LinkList *p

2022-04-07 12:46:51 1457 4

原创 C++继承(一)

在多种接口需要相同输出时,C++的继承相对于传统方式更有利也更方便维护C++继承语法:class 子类:继承方式 父类;传统方式:class Java{public: void header(){ cout << "首页、公开课" << endl; } void footer(){ cout << "帮助中心" << endl }}class Python{ void header(){ .

2022-04-04 22:49:51 788

原创 C++ 友元(一)

全局函数做友元在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术友元的目的就是让一个函数或者类 访问另一个类中私有成员进行访问,就需要用到友元的技术友元关键字:friend友元的三种实现: 全局函数做友元 类做友元 成员函数做友元 //建筑物类class Building{ //goodGay全局函数是 Building好朋友,可以访问Building中私有成员 friend void goodGay(Bu

2022-03-27 23:16:39 970

原创 C++图书管理系统(简单版)

1、系统需求图书管理系统是一个可以记录图书借记和存储的工具。本教程主要利用C++来实现一个图书管理系统系统中需要实现的功能如下:添加书籍:向图书管理系统中添加新书,信息包括(书名、书的价格、书的编号)最多记录1000本显示书籍:显示图书的所有书籍信息书籍删除:按照书名进行删除指定书籍查找书籍:按照姓名查看指定书籍信息修改书籍:按照姓名重新修改指定书籍清空书架:清空书架中所有信息退出图书管理系统:退出当前使用的系统2、菜单功能功能描述:用户选择功能的界面

2022-03-27 22:49:34 49827 33

原创 C++通讯录管理系统(简单版)

这个通讯录管理系统是我听课后做的笔记,都是很基础的逻辑实现,第一次动手写了一个小案例感觉找到了一点方向,也希望能帮到一点忙!1、系统需求通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下:添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 显示联系人:显示通讯录所有联系人信息删除联系人:按照姓名进行删除指定联系人 查找联系人:按照姓名查看指定联系人信息 修改联系人:按照姓名重新修改指.

2022-03-20 17:32:21 3047

原创 Mac如何快速导入代码至GitHub?

Mac如何快速导入代码?1、在vscode中如何导入1、在文件目录中新建一个文件夹,里面要装的是我们要写的代码和介绍2、将文件夹拖入vscode中3、在文件架中新建文件,分别建一个(这里以python为例)的文件.py,和一个readme.md文件(告诉别人这个代码是做什么的)4、.py文件中写入自己的代码,readme文件中写入自己的介绍5、到分支中点击✅(没有创建的话先初始化储蓄库),在消息上输入信息6、点击发布分支,会有private(私有)和public(公共)两个选项,私

2022-03-04 02:16:26 386

原创 C++ using声明以及using的编译指令

using声明namespace KingGlory{ int sunwukongID = 1;}void test01{ int sunwukongID = 2; //using声明 using KingGlory::sunwukongID; //using声明与就近原则的变量同时出现时,会发生报错,应尽量避免}注意:using声明与就近原则的变量同时出现时,会发生报错,应尽量避免。using编译指令namespace KingG

2022-03-02 13:58:31 550

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除