- 博客(18)
- 收藏
- 关注
原创 Unity编辑器扩展的常用知识
OnGUI函数的调用时机OnGUI函数在每一帧至少调用两次,OnGUI对Event事件进行响应,其中layout和repaint事件每帧至少会各执行一次.Events 类型包括鼠标点击、鼠标拖动、按下按钮、鼠标进入或退出窗口、滚轮以及以下提到的其他类型。对于每个事件,在这些脚本中均调用 OnGUI;因此每帧可能多次调用 OnGUI。 Event.current 对应于 OnGUI 调用内的“当前”事件。这些事件的发生都会导致OnGUI函数被调用.此外,通过官方文档发现,layout事件会先于其他任..
2022-02-11 15:51:08 2157
原创 lua基础
boolean在lua语言中,boolean并非条件判断的唯一方式,任何值都可以用于条件判断.除了boolean的false和nil,其他的所有值都表示真.0或者空字符串也表示真lua的逻辑运算符and,or,not也只把nil和boolen的false值当false,把其他的所有值当true.lua 中and 的运算规则1.当第一个操作数为false返回第一个操作数,否则返回第二个操作数lua中or的运算规则1.当第一个操作数不为false返回第一个操作数,否则返回第二个操作数..
2021-12-28 17:44:27 1651
原创 利用UGUI实现分页滚动效果
在游戏中,无论是显示活动或者是任务,分页滚动显示都是一个常见的功能.使用UGUI的Scroll view来实现一个这样的功能是在unity中比较常见的实现方式.Scroll view的设置在Scroll view的content中添加如下俩个组件,可以通过调节grid layout group组件中的cell size来调节没一个分页里的元素的大小.如果只需要水平分页移动,可以将Scroll View组件的vertic垂直选项关闭在content下添加image作为每一个页面,这样就可以通过手动
2021-12-17 16:16:03 2675
原创 UGUI中的obejectpool<T>以及listpool<T>
UGUI源码中的对象池类源码(objectpool)//T 泛型,传入的类型,可以是任意类型(但必须满足泛型约束:new()),T是对象池管理的类型internal class ObjectPool<T> where T : new() { //用一个栈来进行内部实现 private readonly Stack<T> m_Stack = new Stack<T>(); //向对象池里取T类型的元素的时候的回调
2021-12-06 15:14:01 518
原创 在Unity里实现一个有限状态机(2)
状态管理类有限状态机用来管理状态,在某一时刻只能处于一个状态public class Fsm{ //下面是当前状态的信息 private StateID currentStateId; public StateID CurrentStateId { get { return currentStateId; } } private FsmState currentState; public FsmState CurrentState { get { retu
2021-11-29 17:37:35 2653
原创 在unity中实现一个有限状态机(1)
转换条件和状态id对于每一次状态切换,都有一个从当前状态切换到另外一个状态的条件,类似于Unity动画状态机里面的箭头.对于这些条件,可以用一个枚据类型表示.添加变化条件可以在这里添加.public enum Transition{ NullTransiton}对于每一个状态,都会有一个状态id,用来唯一标识该状态.添加状态需要在此添加状态idpublic enum StateID{ NullStateID}状态基类状态模式的核心使用一个类来表示一个状态
2021-11-29 16:54:17 2821 1
原创 并查集quick union实现
并查集quick union实现将每个元素看成一个节点,每个节点都指向一个节点,当一个节点为根节点时其指向的节点为自身.连接节点7和3,即找到7的根节点5和3的根节点2,将根节点5指向2.即将节点7和节点2连接在了一起.在这种实现下,判断两个节点是否连接,只需要找到两个节点的根节点是否相同即可由于每个节点只会指向一个节点,根节点指向自身,所以可以用数组即可实现,数组记录每个节点指向的节点是什么.`class uf2 :uf{public: uf2(int n) {
2021-11-29 16:09:57 134
原创 并查集及其quickfind实现
并查集解决连接问题连接问题只解决两个节点是否连接,并不能得到两个节点之间的路径.如果只需要知道两个节点是否连接而不需要知道两个节点之间的路径的话,并查集是一种很好的数据结构.并查集的主要支持的操作1.union(p,q) 将pq两个节点连接起来(注意,需要将p,q两个节点所在的所有节点全部连接起来)2.isconnected(q,p) 判断两个节点是否连接并查集的常见实现class uf{ virtual int getsize()=0 ; virtual void u
2021-11-16 14:13:31 467
原创 动态规划背包问题
动态规划背包问题问题大多如下一个背包总沉重固定为多少kg有一堆物品,每个物品都有价格和重量在不撑爆背包的情况下,能装走的最多物品的价格或者重量例题如下背包问题开的数组一般都和背包的总承重有关题解:对于每个物体,需要知道是否能拼出重量w([0,m])对于最后一个物体,看它是否可以进入背包如果除了最后一个物体,其他物体能拼出重量w,或者其他物体能拼出w-a[n-1],即最后一个物体拿与不拿的时候能拼出的重量.[0,m]中能拼出的最大重量即为能带走的最大重量问题分析算知道前n
2021-11-09 10:50:44 264
原创 判断回文子串
给定一个字符串找到里面所有的回文子串一个回文串,要么是奇数长度,要么是偶数长度.奇数长度的回文串对于奇数长度来说,可以把字符串的每个元素作为中间的那个元素,然后向两边扩展(元素相同就扩展),字符串的每个元素都可以作为中间元素,总共需要判断n次.偶数长度的回文串对于奇数长度来说,可以把字符串的两个元素中间的线作为中心,然后向两边扩展(元素相同就扩展),字符串的两个元素中间的线都可以作为中间元素,总共需要判断n-1次.经过上述两种操作,可以找出所有长度为奇数和偶数的回文串,回文串要么是奇数,或者偶数
2021-10-29 15:24:44 572
原创 快速排序C++实现
#include <iostream>#include<algorithm>#include"testsorthelp.h"using namespace std;//快速排序(和归并排序类似,也是把数组一分为2的过程),每次都选择一个元素,把他放到排序后这个元素应该在的位置上,再对该标定点左边和右边的//元素分别进行排序。(分出来的数组可能一大一小,不是平均分配)直到整个数组有序。#pragma region 待排序第一个元素为标定点template<typen
2021-10-11 13:54:36 92
原创 往哈希容器里放自定义类型
哈希任何放进哈希表的元素都会通过hash函数算出对应元素的hashcode,再根据hashcode放进hash表对应的桶子里(从hashcode得出该元素要放的桶子一般采用的方法是除模取余).自定义类型对于自定义类型,1.我们需要自己设计hash函数计算出放进去自定义元素的hashcode,来确定放进去的元素应该放在哪个篮子里。而且元素放进桶子里的时候,2.需要判断一下hash表里是否已经有key为该元素的pair了.如果有,只需要更改该元素的值即可.对于1可以自己设计一个hashfunction作
2021-10-07 21:34:18 152
原创 c++右值引用
右值引用右值引用是一种新的引用类型,用来解决不必要的拷贝.当赋值符号的右边是一个右值的时候,赋值符号的左边可以去steal(偷)右边的reourse(值),而不需要给左边重新分配空间,然后去存储右边的值(不需要发生一次拷贝动作).左值:可以放在赋值符号的左边,例如变量int a=3,b=2; a=4;b=a; a,b是左值,可以放在赋值符号的左边,也可以放在赋值符号的右边.右值:只能放在赋值符号的右边.a+b就是一个右值.临时对象也是右值.不能对右值取地址.函数的返回值是一个临时对象(右值
2021-09-25 02:10:14 223
原创 C++智能指针的基本使用
RALL设计理念将资源和对象的生命周期绑定,对象初始化时初始化资源,对象释放时释放资源.将资源托管给一个对象,当对象离开作用域的时候会自动调用析构函数,在析构函数里对资源进行释放.三种智能指针介绍C++新的标准库提供了两种智能指针的类型(智能指针本质上是一个类)来管理动态内存,shard_ptr允许多个智能指针管理一块动态内存(通过引用技术进行管理,当引用计数为0的时候,释放动态内存),而unique_ptr则独占所指向的对象.weak_ptr是一种伴随类,指向shard_ptr指向的对象.这三个指
2021-09-25 00:36:40 151
原创 Lru(最近最久未使用)算法
LRU算法leetcode 146最近最久未使用页面置换算法系统上选择距离当前页面使用时间最长的页面予以淘汰局部性原理:较长时间未使用的页面,可能不会马上用到通常使用栈来组织各个驻留页,栈底放最常时间未使用的,栈顶放最近使用的。当加入的元素超过缓存数量,即页框长度时,选择将栈底的元素换出,将新放入的元素放在栈顶.| 页号 |7|0|1|2|0|3|0|4|| 帧1 |7|0|1|2|0|3|0|4|| 帧2 | |7|0|1|2|0|3|0|| 帧3 | | |7|0|1|2
2021-09-22 14:56:08 1183
原创 C#静态构造函数实现单例
静态构造函数调用时机: 静态构造函数在创建第一个实例或者第一次访问静态成员时调用.静态构造函数的调用时机在实例构造函数之前.基本属性: 不能设置访问修饰符,不带参数,不能重载和继承,类或者结构体只能有一个静态构造.由CLR自动调用,不能手动调用.如果没有静态构造函数,静态变量的值将是默认值(C#不同类型对应有默认值)实现单例,利用静态构造函数public sealed class A{ private A() {} private static A instance=new
2021-09-21 15:58:06 672
原创 单例模式(懒汉饿汉)
单例介绍静态方法只能访问静态数据成员单例模式保证类只有一个对象该唯一对象由类内部创建类向外部提供访问该唯一对象的接口,将构造函数说明为私有,可以避免外部创建对象.饿汉单例饿汉单例在类被加载时就以及将唯一的对象实例化出来了,没有达到Lazy load,内存开销比较大.饿汉单例优点是不存在线程安全的问题.懒汉单例在外部第一次向类调用接口访问唯一对象时再去创建对象,达到了Lazy load,但是会有线程安全的问题....
2021-09-21 15:02:11 97
原创 A*算法初步
Unity下A*算法的初步介绍A*算法解决的问题找到从初始点到目标点之间没有障碍物的最短路径(计算玩家移动的路径)A*算法的基本原理从当前点的周围选出所有合法的点,再从合法的点中选找出最优的点.再对选出的最优点进行重复相同的操作(此时考虑合法的点的时候,不需要考虑之前以及考虑过的那些合法的点),一直找到目标点.什么是合法的点?不越界,不是障碍物.A*算法的详细原理f(寻路消耗)=g(离起点的距离)+h(离终点的距离)开放列表关闭列表每个点的父亲节点...
2021-09-18 22:30:23 132
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人