Unity
文章平均质量分 53
JayW就是我
一只在大连的程序猿。
展开
-
Unity3D开发之刚体休眠问题
unity刚体休眠原创 2022-11-23 08:51:58 · 1741 阅读 · 0 评论 -
Unity3D开发之OnPointerClick事件
OnPointerClick是unity事件系统自带的点击推送事件。继承IPointerClickHandler接口,并在脚本中实现接口,点击挂此脚本的物体系统会调用实现的OnPointerClick函数。 public void OnPointerClick(PointerEventData eventData) { if (eventData.button == 0) { if (eventData.clickCount == 1)原创 2022-04-28 15:49:45 · 10052 阅读 · 2 评论 -
Unity3D开发之Destroy和DestroyImmediate
正如单词所表述的意思,一个是销毁物体,一个是立即销毁。单纯的Destroy调用后不会立即销毁物体,如API所述会在update执行后在某个时间执行,但一定实在render调用之前。而DestroyImmediate调用会立即执行销毁物体。只有销毁掉才会执行下一句代码。代码执行结果验证: GameObject go=new GameObject(); D d=new D() { go=go }; Destroy(go); Debu...原创 2022-03-31 16:16:25 · 4680 阅读 · 0 评论 -
Unity3D开发之material和sharedMaterial区别
MeshRenderer meshRenderer = GetComponent<MeshRenderer>(); Material material = meshRenderer.sharedMaterial; Debug.Log(material.GetInstanceID()); //-110736 Debug.Log(meshRenderer.material.GetInstanceI...原创 2022-03-16 17:33:38 · 4244 阅读 · 0 评论 -
Unity3D开发之监听UI大小变化
我们通常会有当一个UI大小发生变化时去触发某个事件的需求。unity提供了这些事件,在UnityEngine.EventSystems.UIBehaviour下。当我们新建一个脚本继承自UnityEngine.EventSystems.UIBehaviour类,并且将脚本挂载在需要监测大小变化的UI物体上时,当UI大小发生变话时,就会推送消息给OnRectTransformDimensionsChange函数中。我们重写OnRectTransformDimensionsChange内容。代码...原创 2021-07-14 16:05:42 · 2461 阅读 · 1 评论 -
Unity3D开发之扇形图
扇形图原理和折线图差不多,都是在UI的OnPopulateMesh函数下绘制的。由于做的是半径不均匀的扇形图,所以去贴图抗锯齿没有实现。大家有啥想法(怎么取uv以及边界模糊的贴图怎么画)欢迎留言。下面是OnPopulateMesh下的代码块。protected override void OnPopulateMesh(VertexHelper toFill) { toFill.Clear(); //ITEMS表示这个圆形被多少个三角形均分 数量越多 圆越原创 2021-03-24 10:07:42 · 1167 阅读 · 0 评论 -
Unity3D开发之GL画线
最近一直在专心炒股,博客也没时间整。虽然很耗费精力,但是确实有意思。炒股不仅是对大盘形势的判断,有时候更是对自己全身心的考验。还是新鲜的小韭菜,还有很长的路要走。加油奥利给!最近有个需求就是要给一个面片加边缘线。之前使用的边线贴图盖上面片上面,可是当面片拉伸时,边缘线也跟着拉伸,导致拉伸边缘线变粗或者变细。因为都是规则的方形,所以我使用gl自己画一个边缘线。效果如下:最后一个是未添加外线的面片。代码贴在下面:void OnRenderObject() {原创 2020-11-26 17:24:03 · 1383 阅读 · 0 评论 -
Unity3D开发之折线图的制作(三)折线图终结篇之抗锯齿
至于怎么挂载脚本怎么能够运行请参考折线图制作(二)的文章。之前写的折线图一直被锯齿烦恼着,一直无法使用。一开始一直以为要自己写边际模糊算法来模糊编辑的锯齿部分,这可太难了。后来我的美术搭档告诉我可以用渐变图来模糊边界。这里要感谢他的想法帮我把困扰两三年的问题解决了。如果需要使用图片,我们就不能继承自MaskableGraphic,因为他没有对图片的操作。我们要继承自image,这样有sprite的引用。代码没什么变化,主要是在设置uv时需要注意。将模糊边界的UV贴到矩形的长斜边上。 //折线图原创 2020-09-27 17:37:31 · 2152 阅读 · 1 评论 -
Unity3D 我的UIFramework
目录基本组件1.UI面板基类BasePanel1.API2.开发案例2.UI面板管理器UIManager1.API2.使用方法3.UI面板配置文件管理ReadUIConfig1.使用方法4.面板动画PanelAnimation1.API2.使用方法使用案例1使用案例2基本组件1.UI面板基类BasePanel1.APIprotected UIManager uiManager;统一获取对UIManager的引用protected RectTransform rectTransform,pare原创 2020-09-23 15:10:41 · 802 阅读 · 0 评论 -
Unity3D开发之发布安卓apk连接不上网络
这个问题据说是在高版本手机上会出现。我的测试机P30就遇到这种问题。解决方案:打开项目文件,进入 xx\项目文件\Temp\StagingArea文件夹下,找到AndroidManifest.xml文件。打开,在如下位置加入如下设置:android:usesCleartextTraffic="true" 记得在添加之前加一个空格,不然打包会报错。...原创 2020-09-16 21:45:37 · 1863 阅读 · 3 评论 -
Unity3D开发之构建自己的多选标签
下面代码主要实现的是类似camera中的Culling Mask。可多选标签。首先创建一个我们自己的特性类,继承自PropertyAttribute:public class MyAttribute : PropertyAttribute{ }然后创建一个我们自己的属性绘制器,继承自PropertyDrawer,代码如下:[CustomPropertyDrawer(typeof(MyAttribute))]public class MyPropertyDrawer : Pr原创 2020-09-03 17:31:11 · 692 阅读 · 0 评论 -
Unity3D开发之Remote5连接不上unity
先使用usb连接手机和电脑,打开调试模式。 打开remote(要先打开remote) 打开unity项目 运行项目,就可以直接调试了。一定要先打开remote,后打开unity项目。我将这个情况和一个朋友说了,他猜测应该是remote作为服务器,unity为客户端。unity再打开得时候会主动去连接一次remote,连接不上就默认不使用remote调试。...原创 2020-08-23 22:49:11 · 2382 阅读 · 0 评论 -
Unity3D开发之判断鼠标是否在UI上
unity给我们提供了一条api。EventSystem.current.IsPointerOverGameObject()==true他是利用unity的EventSystem事件系统判断射线是否射到物体上。我们查看官方文档可以看到继承BaseRaycaster的有三个组件,.PhysicsRaycaster, Physics2DRaycaster, GraphicRaycaster,所以当我们项目中只有canvas自带的GraphicRaycaster时,我们可以使用上述api判断鼠标是否在U原创 2020-05-12 09:50:07 · 1860 阅读 · 1 评论 -
Unity3D开发之设置UI位置
我们在动态加载面板的时候就会涉及到初始化面板位置的问题,少不了设置UI位置。而UI不像3D物体可以直接设置Position。因为决定他位置的是RectTransform,并且UI会设置锚点,位置并不是固定。下面就来记录不同状况下设置UI位置的方法。一.不设置锚点直接设置LocalPosition即可。代码如下: RectTransform rectTransform = Get...原创 2020-04-29 15:36:05 · 12231 阅读 · 1 评论 -
Unity3D开发提示框跟随文字数量自适应大小
项目中经常遇到鼠标移到按钮上显示按钮功能的需求。如下所示:我们设计的Tip结构是父物体为image,子物体是text。text上显示对应的文字。(Unity版本5.3.5)我们可以在image上添加HorizontalLayoutGroup和ContentSizeFitter组件。ContentSizeFitter在水平自适应上选择适应大小(preferred sized)。这样我们在...原创 2020-04-29 11:37:29 · 1909 阅读 · 0 评论 -
Unity3D开发之聊聊项目UI框架
最近在负责老项目UI的更改,领导说有点乱,确实,改的我真想喝毒药,程序猿应该可以感受到项目重构的痛苦。之前的UI比较无序吧,就是一个按钮点击去调用某个事件,按钮图标变化,当用其他点击方式调用这个事件后,在去修改按钮图标。两处修改经常会导致显示错乱。还有调用某个事件的时候关闭某个面板,其他函数也有关闭这个面板,都是直接setactive(false),在维护项目的时候是真的很头痛。于是我就在...原创 2020-04-28 16:44:26 · 741 阅读 · 0 评论 -
Unity3D开发之UI图片闪烁的问题
问题:项目里用图片画的线在拉近和拉远摄像头时时而显示时而隐藏。后来在选中这个图片后发现他的scale很大650,而width很小为0.3。解决方案:后来将scale调成1而将宽度调成自己设定的长度就可以正确的显示了。...原创 2020-04-01 10:56:43 · 2591 阅读 · 0 评论 -
Unity3D开发之Transform记录
一个物体下有四个子物体,无论有没有子物体setactive=false,transform.childCount=4 同样 即使第一个子物体隐藏,transform.GetChild(0)依然能获取到。 transform.GetComponentsInChildren<Transform>().Length获得的数量受子物体是否隐藏影响。隐藏就无法被找到。 注意:返回的包含父...原创 2020-02-28 10:45:40 · 532 阅读 · 0 评论 -
Unity3D开发之拖拽物体功能实现
拖拽功能实现我们使用unity官方提供的事件接口IDragHandler。当我们拖动的时候,unity自动给挂在脚本的OnDrag函数推送事件。拖拽UI需要在inspector面板上添加eventsystem,并确定场景中有物体挂载GraphicRaycaster脚本。通常我们创建的canvas上就有此脚本。代码如下://拖拽UIpublic class DragUIContr...原创 2020-01-14 10:21:35 · 6181 阅读 · 0 评论 -
Unity3D开发之设置网格对齐
设置网格对齐是让位置的小数点保留一位。这样位置距离可以保持在0.1的整数倍上。易于设置重合。代码如下:public static Vector3 CalculateGrid(Vector3 _v3) { float x = _v3.x; float y = _v3.y; float z = _v3.z; x = (...原创 2019-12-26 17:18:00 · 1740 阅读 · 0 评论 -
Unity WEBGL设置全屏
在webgl平台,直接设置Screen.fullScreen = true;是不可以成功直接全屏的。我们去官网查看webgl的FullScreen讲解。Due to security concerns, browsers will only allow locking the cursor or going into full-screen mode in direct response t...原创 2019-12-18 18:10:57 · 8723 阅读 · 1 评论 -
Unity3D开发之webgl键盘事件监听和其他js输入冲突问题
我们在做一个大的集控平台的时候,很多时候会把unity导出的webgl 3D程序嵌到大平台页面中,属于大平台的一个子功能。在打开3d程序之后再切换到其他js页面的时候,我们会发现其他页面的输入键盘事件不好使了。比如一个input无法输入,也无法删除input里的文字。即input事件被劫听了。我们打开unity官方文档搜webgl input就会发现这么一段话:By default, ...原创 2019-11-29 09:50:24 · 3735 阅读 · 16 评论 -
Unity3D开发之读取excel数据转换到实例类中
也不知道为啥CSDN的平台这么有意思,下点dll都需要币。哭笑脸。下面是excel数据转成实体类的代码。excel有两种格式。.xlsx和xls。当格式为xlsx时,读取的代码为:IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);当格式为xls时,读取代码为:IExc...原创 2019-11-07 16:06:29 · 638 阅读 · 0 评论 -
Unity3D开发之BestHttp插件使用
Get请求 HTTPRequest request = new HTTPRequest(new Uri("http://10.1.5.106/WebService1.asmx/GetMethodHandle?"), HTTPMethods.Get, RequestHandle);接受请求的响应函数为private void RequestHandle(HTT...原创 2019-11-06 15:57:02 · 6836 阅读 · 0 评论 -
Unity3D开发之IPointer事件
Unity给我们提供了IPointer一些unity事件接口。比如:IBeginDragHandler,IPointerClickHandler等。在新建场景中创建一个canvas后,我们会发现canvas上有一个GraphicRaycaster组件。他是负责射线检测和Canvas上的UI图形的交互组件。所以我们可以使用EventSystem.current.IsPointerOverGame...原创 2019-11-05 17:47:01 · 3178 阅读 · 2 评论 -
Unity3D开发之计算鼠标点击射线和地面的交点(无collider)
在开发的时候我们经常会遇到这种需求,点击鼠标获取和地面的交点。通常我们使用射线和地面碰撞。可是当场景中有很多物体的时候 ,我们就要设置射线的碰撞laymask。非常麻烦。这里我们使用数学计算和地面的交点,无需担心其他干扰。我们点击鼠标后,发出一条射线,我们通过这条射线就可以获取到和地面的交点。我们计算射线的起点y值和平面的距离(y=0)。然后在获取射线方向向量在y轴方向的分量,这样我们通过距离...原创 2019-10-22 18:03:08 · 2476 阅读 · 0 评论 -
Unity WEBGL设置浏览器全屏
转自https://blog.csdn.net/qq_38456478/article/details/78869971在生成的html里面修改代码<script type="text/javascript">function Reset() {var canvas = document.getElementById("#canvas");canvas....转载 2019-10-14 11:26:45 · 4707 阅读 · 2 评论 -
Unity3D开发之控制摄像机移动
最近公司的几个项目开发内容基本相同,很多脚本直接复制过来就可以拼接项目。之前一直是代码爱好者,能自己敲的绝对不去复制粘贴。但是开发速度确实是被耽误了,所以接下来打算把开发中常用的脚本都发到博客上。自己需要的时候直接拿来。也希望能帮到你们。unity编辑器中按住鼠标右键,在通过控制键盘的wasdqe键可以自由控制视野。下面就是实现操作的代码:using System.Collections;原创 2017-10-20 13:10:57 · 15579 阅读 · 6 评论 -
Unity3D开发之协程
协程,其实是unity做的一种类似线程的东西,但不是线程。协程是运行在主线程上,并不可以并行运算,因此他可以去处理逻辑问题。一.打开协程及关闭协程// Use this for initialization void Start() { StartCoroutine("Wait"); Invoke("Stop",5); } ...原创 2019-06-20 15:02:54 · 4885 阅读 · 0 评论 -
Unity3D开发之Rect.size和sizeDelta的区别
昨天发现自己做的时间段选择UI不能自适应。任何不能做自适应的插件都是不合格的。所以就在找原因。后来发现是在doubleslider代码中的错误。之前的代码版本是在Awake里获取width。后来设置锚点后打印width接近0.这是明显的错误。翻unityanswer发现确实有人遇到这个问题,是因为Awake初始化ui的Rectangle还没有初始化出来,所以获取到的值是错误的,要在Start函数或...原创 2019-05-28 10:19:42 · 11161 阅读 · 4 评论 -
Unity3D开发之人员位置热力图
热力图,以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示。通常我们会接受到一定区域的人员位置历史数据以及所在的房间。本文使用的方法是SetPixel。我们只需把人员位置映射到图片的向像素里。通常像素为整数。所以我们要把位置取整。假如我们要绘制的是一个10*10的房间,这样理论我们需要生成一个10*10的贴图。可在实验中我们发现贴图太小导致锯齿太大。而不能产生很好的效果。所以我给...原创 2019-05-23 15:16:17 · 4717 阅读 · 9 评论 -
Unity3D开发之时间段选择
最近在帮同事做一点项目。分配给我了人员位置热力图的功能块。其中一块需要时间段的的选取。效果如下:看到这个瞬间让我想到很久之前画折线图那块,我们通过给Image新的顶点来绘制我们需要的图形。所以我们需要在Canvas下创建一个空物体并挂上我们自己创建的脚本MyDoubleSlider,由于我们看效果图可以看到一个横条是被分成了12份,所以根据UI我们自己设定空物体的width=960,hei...原创 2019-05-20 17:52:01 · 2119 阅读 · 0 评论 -
Unity3D开发之淡入淡出效果实现(VR和桌面通用)
在我们开发项目的时候竟然会用到镜头的切换,而我们直接切换会造成用户的不舒适感,这时候就需要我们使用淡入淡出镜头来让用户有更佳的切换感受,不会感觉特别的唐突。我们在百度淡入淡出的时候,大多讲的就是使用GUI或者UGUI的来控制的,但这并不适合3DVR模式下的开发。VR模式下的ScreenSpace模式下的Canvas并不会被VR镜头显示出来,所以我们需要在渲染顺序上添加我们的想法。摄像机渲染通常...原创 2019-03-07 09:47:43 · 4220 阅读 · 8 评论 -
Unity3D开发之仿写Button面板事件绑定功能
新年已去,转眼二月也过了一大半,蓦然回首,发现这两个月啥也没学到。苦笑中。。。前段时间搞了NetWork,项目急也没来得及更到博客上。以后有时间在记录吧。最近在做一个情节引导得项目。其中一个需求特点是:每一步都要显示类似的信息,不同的是,每一次要去引导玩家玩的东西不同。比如:第一步需要显示物体1,第二步需要显示物体2,区别就是在相同的脚本调用不同的函数。我们不可能为了每一次不同的设置写不同的脚...原创 2019-02-19 10:33:33 · 1029 阅读 · 1 评论 -
Unity3D开发之Json解析
Unity自带的JsonUtility我之前使用过,记得有些问题,所以就没有使用,转而使用LitJson。我们首先需要获取LitJson.dll然后放到项目Plugins下供我们的项目引用。下面是我们要解析的json字符串:{"currentPlayerId": "test", "gameId": "test", "tableHeight": "1000", "timeStamp": "20...原创 2019-01-31 10:57:03 · 1780 阅读 · 0 评论 -
Unity3D开发之调用webservice
当我们软件在点击进入的时候需要刷卡登陆时,需要我们将卡号id发送到数据库进行比对来验证用户是否注册。如果我们客户端直接与数据库连接,具有不安全性,容易被破解然后获取到数据库数据。所以在服务器做一个服务程序是最好的选择。而由于客户端不需要实时连接服务器或者服务器上的数据库,所以socket通信有些大材小用。webservice其实就是一次性连接,当我们调用的时候就会和服务创立连接,做完交互后就会自动...原创 2019-06-20 23:53:05 · 1074 阅读 · 0 评论 -
Unity3D开发之发布webplayer设置全屏
项目打包出来后会出现一个html文件,使用notepad打开,删除部分代码 并增加一些代码可设置全屏。 <style type="text/css"> #unityPlayer { float:left; top: 0px; height: 100%; width: 100%; position: relative; } ...原创 2019-07-04 09:55:25 · 2083 阅读 · 0 评论 -
Unity3D开发之串口通信
unity读取串口数据代码如下:public class GetIdTest : MonoBehaviour{ private SerialPort sp; private Thread recvThread;//线程 void Start() { sp = new SerialPort("COM3", 9600, Parity.Non...原创 2019-07-06 11:52:45 · 6224 阅读 · 0 评论 -
Unity3D开发之unity和js通信交互
一.老版方法unity发布webplayer平台后会输出html和unity3d文件。我们的程序主要被打包在unity3d文件里,而html则是网页的界面显示。1.Unity发送消息给JSunity想要和js交互,提供了一个函数:Application.ExternalCall();此函数仅限于webplayer平台下。我们编辑发布的html文件,在里面加入我们的js脚本如下:f...原创 2019-07-17 10:41:48 · 12818 阅读 · 5 评论 -
Unity3D开发之跟随3D物体移动的提示面板
void Update() { Vector2 pos;//if 提示面板要跟随鼠标移动 就输入鼠标位置 else if 提示面板要显示在物体上面 输入物体世界坐标转换到屏幕坐标的值 Vector2 screenPos = isMousePosition == true ? Input.mousePosition : Camera.main.WorldT...原创 2019-08-06 15:51:31 · 972 阅读 · 0 评论