- 博客(30)
- 收藏
- 关注
原创 Unity判断一个点在多边形内的情况
t的计算是为了得出跟点point等高的坐标,判断point<=x,这个操作就相当于point往右发射射线。先将多边形放在一个矩形区域内,首先判断点是不是在矩形区域,如果不在则直接返回。如果射线命中多边形的次数为偶数,则不在多边形内 如下图所示。如果射线命中多边形的次数为奇数,则在多边形内;从点的位置向右发射射线。
2024-06-04 15:00:26 310
原创 Laya入门
4.其他场景对象,比如Unity导出的场景对象,是继承自Scene3D的,该场景中的物体脚本都是Script3D。2.继承自Script的脚本对象,是挂载在ui物体上的,可以使用this.owner获取挂载的对象。5.Laya中都是以Sprite精灵为基础,UI是Sprite,Scene也是Sprite。1.Laya.Scene是场景对象,继承自Scene类的可以直接使用ui元素。3.Script对象 this.owner.scene表示这个场景对象。
2024-05-10 13:28:27 208
原创 Unity 关于DrawCall的理解
图1中Game界面3个Batches,FrameDebug面板中可以看到绘制UI只产生了1次DrawCall。Game界面Batches变成了4,FrameDebug界面看到绘制UI产生了2次DrawCall。DrawCall是每次CPU向GPU调用绘制操作的过程 每调用一次就会产生1个DrawCall。但是如果是使用图集的话,则依然是同一张图片,所以只会调用1次DrawCall。而如果是不同的图片,则会产生2个DrawCall,如。在UI中,不同的图片会产生DrawCall,如。
2024-05-07 16:48:21 437
原创 对象池的缺点及几种优化方法
当超过最大值maxSize时,list.Count - remainCountClear 为要清除多少个对象。此时对象池不够,需要添加更多的对象。而当增加完对象后,大量对象长时间存在内存里没有被使用,就导致了内存消耗。但是这种方法又会导致新的问题:清理过后,下次再释放1个对象,又会超过最大值,可以使用1个字典存放每个对象的使用时间,一旦超过了最大使用时间则触发清除。如果对象池内的数量超过了最大值,则触发清除对象,直到数量为最大值。比如仅在某个时间段突然需要大量对象,其他时间只用少量对象。
2024-04-08 16:18:08 321
原创 Unity中解决斜坡移动的办法
通过向玩家脚下发射一条射线,获取到平面的法向量。然后比较玩家移动方向和法向量的夹角。如果angle>90 && angle<180,则向上走。如果angle>0 && angle<90, 则向下走。
2024-04-05 15:36:30 856 1
原创 重新回顾Unity生命周期
Awake:不管有没有勾选组件启用,都会在GameObject生成后一开始调用。没有勾选MonoTest,Awake也会调用,但是其他的周期函数不会调用。但是如果把GameObject隐藏掉,那么所有的周期函数都不会执行了。初始化阶段:Awake->OnEnable->Start。Start:必须勾选组件后才会调用,不然不会调用(注意OnEnable在Start之前。勾选上了,则其他的周期函数开始调用。
2024-03-26 12:13:49 253
原创 关于NGUI的事件系统
2.他会在Update检测鼠标,根据鼠标状态来确定是拖拽还是点击等操作,用SendMessage发送不同的事件。UICamera:虽然写作Camera,但是实际上负责的是事件的处理功能。1.发送射线,根据射线打到的物体,设置当前事件的GameObject。
2023-09-04 10:50:36 104
原创 Unity AB包详解
图8为LZ4,加载速度较快,跟NoCompression速度差不多,第二次加载速度很快,暂时不清楚原因。图6为No Compression,加载速度是最快的,并且第二次加载速度很快,暂时不清楚原因。③LZ4:包体压缩中等,速度较快,速度跟No Compression差不多(推荐使用)图1中的model为41.6MB,依照3个选项分别打成3个包,如图2,图3,图4,图5。②LZMA:包体压缩到最小,但是解压速度最慢,加载的时候会加载整个包。图7为LZMA,加载速度最慢,第二次加载速度稍快。
2023-07-14 15:54:08 1239 1
原创 向量点乘和叉乘在Unity中的应用
上面的代码可以获取玩家和物体的方位,首先根据叉乘获取左右方向,之后再根据点乘获取前后方向。当点乘>0的时候,两个向量所成的夹角0的时候,a在b的左边;叉乘y值>0的时候,a在b的右边。
2023-07-12 11:50:43 682 1
原创 剖析Unity中的EventSystem
1.PointerInputModule:检测如鼠标按下等事件2.ExecuteEvents:负责调用各种Handler(如IPointerClickHandler)3.EventSystem:调用BaseRaycaster的射线检测4.BaseRaycaster:实现射线检测的逻辑所以,要使用unity自带的事件系统检测3d物体,则需要以下几步:1.创建EventSystem物体2.将摄像机挂载上PhysicsRaycaster组件3.实现PointerHandler接口。
2023-06-17 18:44:40 498 1
原创 RectTransformUtility方法说明
/*这个屏幕坐标相对于矩形中心点的位置*/ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint);
2023-06-14 11:36:18 265
原创 PlayableAPI学习笔记(待续..)
Graph相当于一个AnimatorController或者Manager的作用,负责管理Playable的生命周期所有类名有Playable的,创建都需要使用.Create,不是直接new创建混合器需要先创建一个MixerPlayable//可以在一开始时指定端口数量//AnimationMixerPlayable mixer1 = AnimationMixerPlayable.Create(graph1, 2);//也可以在后面再设置端口数量//端口供后面图连接使用AnimationM
2022-04-23 19:53:17 338
原创 Lua笔记
lua中使用类中的方法来访问自己类的属性 几种方式print("--------分割线---------")Student = { age = 18, ["name"] = "老王", -- 写在表里面的方法,只能使用方法名 = 函数 [[-- 在类的内部与外部想要增添修改该类的方法时 都不允许下面的写法,除非是使用冒号--]] -- 不能直接声明函数function Fun(),否则会报错 --1.加类名.属性 printName = function() print("
2021-12-10 09:20:02 205
原创 简单理解Unity中叉乘的方向
由于Unity使用的是左手坐标系,所以我们这里采用左手定则来表示坐标系,如图拇指方向为X轴正向,食指为Y轴正向,中指为Z轴正向在叉乘计算方向的时候利用好这三根手指,可以很好的判断叉乘方向。在调用Vector3.Cross时,**食指为传入的第一个向量,中指是第二个向量,拇指则是叉乘的方向了。**下面是具体的步骤以食指代表的向量开始旋转,旋转到中指处,如果旋转的角度小于180度,那么向量的方向与拇指的方向是相同的;反之,发现食指顺时针旋转到中指后超过了180度,那么向量的方向就是拇指的反方向。上图
2021-11-27 15:42:38 7090
原创 Unity手机调试的几个注意事项
测试了很久,总算成功在真机上调试Unity安卓项目啦!下面说下具体设置步骤1.先将USB数据线插到电脑上,之后手机开启USB调试功能(手机有这个功能的话一定要开启,不要忘了!!否则无法调试)2.打开UnityRemote5,启动Unity。注意顺序不要搞反了,如果先启动Unity后再启动Remote的话,很可能会因为识别不到而没反应;同时记住Remote不要切出,否则可能会没反应3.打开Edit->ProjectSettings->Editor,改成安卓设备4.打开Edit->P
2021-10-31 16:53:00 3258
原创 关于xlua中的一个坑(大概是坑)——xlua对扩展方法的支持问题
xlua似乎不支持调用对委托的扩展方法,如下我在C#里面为UnityAction扩展了一个方法,用来添加委托,之后我本来打算通过lua来调用这个扩展方法,但是结果报错了报错信息如下我一开始以为这可能是lua调用扩展方法产生的的问题,但是我又写了几个扩展方法,在lua中都可以正常使用,唯独这个对委托的扩展方法会报错我不知道这是我语法的问题还是说xlua不支持这样,暂时记录一下,希望有大佬可以帮忙解决...
2021-10-10 15:48:04 1346
原创 xlua食用手册
加载lua脚本的方法方法一 LuaEnv env = new LuaEnv(); env.DoString("require('Welcome')");调用env.DoString(),就可以执行lua语法了,这里建议通过lua中require的方法调用另一个脚本,避免了大量字符串的产生xlua中使用require时,会默认查找Resources文件夹下的文件,如果查找不到会报错 并且在Resouces文件夹中的只能命名为.txt后缀或其他,不能使用lua后缀,这可能由于xl
2021-09-24 14:10:31 244
原创 Unity中TimeLine的注意事项(待续)
1.Cinemachine中创建的Virtual Camera在并不存在,只是影响添加了Cinemachine Brain组件的摄像机,相当于预先为摄像机提供几个移动的点位2.TimeLine最后一帧即是播放结束后,整个场景的状态,比如最后一帧物体被取消Active后,那么播放结束后将不会被自动激活3.当某个组件被放在TimeLine中,且TimeLine正在播放时,将暂时无法通过代码修改这个组件(比如移动,动画播放等将无法手动更改).........
2021-09-09 14:15:43 2770
原创 C#实现任意数组的指定数据类型排序
Unity萌新开发日记——实现任意数组的指定数据类型排序(本文使用冒泡排序)首先可以知道的是,一些常用的数据类型(如int, string等)自带了CompareTo方法,结果返回1或-1,直接调用这个方法就可以进行排序但是,如果我们需要对复杂的数据类型做排序(如下面的自定义类型Person),那么肯定需要自己写比较方法,否则自然不能进行排序如下图,这是实现了常用数据类型的排序使用泛型可以很容易的实现 实现了IComparable接口的数据类型的比较而这里我们的需求更改一下,改为对Person类
2021-09-07 16:12:24 1285
原创 Unity萌新崩溃日常——递归闪退问题
Unity中似乎并不提倡使用递归,我在写一个创建敌人的方法时,使用了递归来重复判断有没有路线被占用,如下using System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// 存放敌人信息/// </summary>public class EnemyStatusInfo : MonoBehaviour { public float HP = 2
2020-11-29 11:40:34 484
原创 关于Unity中空指针引用异常的问题
2020.11.21在一个脚本中调用另一个脚本的方法时遇到的问题今天,在编写敌人路线模块时,我想要在WayLine脚本中调用EnemySpawn脚本中的IndexOfTheSelectedChild方法,如下 private bool isOccupied = true; EnemySpawn es;...
2020-11-21 17:45:49 1336
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人