游戏引擎
Unity/CocosCreator等
SuperWiwi
这个作者很懒,什么都没留下…
展开
-
Unity内存管理
内存管理是性能优化的一个重要方面。可能造成性能问题的原因有2个:● 不必要的内存分配:垃圾回收开销大,占用CPU(用户体验差?怎么差了?会卡?)● 内存泄露:导致崩溃通过unity高效使用内存需要学会这些:● Unity引擎底层● Mono平台● C#语言● IL2CPP脚本后端的工作原理为什么不只是关注高层问题呢?因为计算机是个复杂的系统,如果长期脱离底层问题,可能会导致潜在灾难。因为游戏引擎的设计方案通常是这样的:● 在底层运行C++,处理渲染、动画、资源管理等;● 为要实现的玩法逻辑原创 2022-07-11 08:43:31 · 971 阅读 · 0 评论 -
【Unity】不同DPI导致MousePosition不正确
原本是这样一个功能:在编辑器下移动鼠标在鼠标所在位置,从摄像机向世界空间发射一条射线射线射中某个平面,在hit point处生成1个cube产生的问题:在编辑器下获取鼠标位置的函数:Event.current.mousePosition假如此时,显示器的分辨率为1920x1080,则左上角是(0,0),右下角是(1920,1080)。但是,如果DPI不是100,那么此时的mousePosition就会错误。解决方案:获取操作系统当前设置的DPI:使用Unity的API:Scr原创 2021-05-19 17:15:18 · 2056 阅读 · 0 评论 -
Unity编辑器开发——Undo
文章目录引言Unity Undo原理Undo.RecordObjectUndo.undoRedoPerformed引言自定义编辑器时,有些操作希望能够撤销。比如,我们目前正在开发的spline编辑,拖动控制点、修改spline属性这两种操作是很难一次做到位的,那么就可能需要多次的undo。那么如何实现呢?实现Undo/Redo通常有3种方式:一、基于对象序列化的Undo\Redo二、基于Command模式的Undo\Redo三、结合RoutedEvent、Observer模式和Command原创 2021-04-12 11:20:49 · 3647 阅读 · 0 评论 -
【Unity】Failed to open source file UnityCG.cginc
方法1:确保您的着色器文件(如果包含其他文件)具有正确的文件夹结构。在将文件移动到不同的文件夹后,我也遇到了这种情况。基本上,这打破了自定义文件之间的连接。IE:在我的着色器文件中,我包含一个资源文件。我以前只是把它放在这样的根目录下。#include“ /CustomShaderFile.cginc”因此,当我将自定义着色器移动到新文件夹中时,我必须更改结构,以使其在正确的文件夹中显示。#include“ …/ShadersFolder/CustomShaderFile.cginc”方法2:原创 2021-03-25 11:40:00 · 5824 阅读 · 2 评论 -
Unity编辑器扩展:自定义编辑器(Inspector+SceneView)
文章目录一、引言二、自定义Inspector三、控制SceneView参考一、引言在 Unity 中创建脚本时,默认情况下,此脚本继承自 MonoBehaviour,因此可作为附加到游戏对象的组件。将一个组件放置在游戏对象上时,Inspector 会显示一个默认界面,可用于查看和编辑每个公共变量,例如:整数、浮点数或字符串。自定义编辑器是一个单独脚本,可将此默认布局替换为您选择的任何编辑器控件。比如,要为 LookAtPoint 脚本创建自定义编辑器,请执行以下操作:创建一个新的 C#脚本命名为原创 2021-01-26 19:46:51 · 1123 阅读 · 0 评论 -
IMGUI常用API总结
文章目录一、IMGUI简介二、控件(组件)相关APIType相关Content相关三、布局相关API1.固定布局与自动布局2.GUI的Group3.GUILayout的Area和Group4. 空白元素5.控件扩展四、样式相关API五、事件相关API参考一、IMGUI简介“即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI原创 2021-01-26 17:58:55 · 4503 阅读 · 2 评论 -
Unity编辑器扩展:窗口
文章目录一、概述二、派生自EditorWindow三、显示窗口四、实现窗口的 GUI参考一、概述创建自定义编辑器窗口涉及以下简单步骤:创建一个派生自 EditorWindow 的脚本。使用代码触发窗口自行显示。实现工具的 GUI 代码。二、派生自EditorWindow为了创建编辑器窗口,必须将脚本存储在称为“Editor”的文件夹中。在派生自 EditorWindow 的此脚本内创建一个类。然后在内部 OnGUI 函数中编写 GUI 控件。using UnityEngine;usin原创 2021-01-26 17:22:16 · 523 阅读 · 0 评论 -
【Unity】编辑器下或PlayMode立即运行的属性
文章目录问题Unity的InitializeOnLoad属性UnityEditor.Callbacks的PostProcessScene属性检测Playmode的变化问题如果点击Play之后有一些代码执行了,而你又完全找不到调用者。那么,作者很有可能使用了以下的这些小技巧,它们的特点是只要进入Playmode就会自动执行。Unity的InitializeOnLoad属性有时,若能够在 Unity 启动时立即在项目中运行一些 Editor 脚本代码而无需用户进行操作,这会很有用处。为实现此目的,可原创 2020-11-27 20:16:53 · 3133 阅读 · 0 评论 -
如何在Unity中创建Script时自动添加作者和日期信息
文章目录0.效果1.在硬盘上找到Unity创建Script的模板文件进行修改2.在Unity创建Editor文件夹并放入Copy.cs0.效果在多人合作的时候,看到任何一个脚本都可以知道负责人是谁。1.在硬盘上找到Unity创建Script的模板文件进行修改使用Everything在硬盘上搜索81-C# Script-NewBehaviourScript.cs:每个Unity版本的模板文件都可以修改。如果遇到了没有权限保存的问题,可以进行如下操作:右键--属性--安全--编辑--选择Us原创 2020-08-07 16:45:45 · 942 阅读 · 0 评论 -
【Unity】Editor编程笔记(更新ing)
文章目录一、简介二、修改Editor1.菜单栏2.窗口3.Inspector4.Gizmos一、简介Editor编程就是指,所编写的代码:可以修改Unity Editor可以在Unity Editor环境下运行通常使用了UnityEditor命名空间下的API或继承了Editor相关的类/接口。一旦脱离Unity Editor环境,这部分代码就不起作用了,所以在Build的时候不能包含Editor代码,否则会报错。为了防止Build的时候包含Editor代码,有两种可选方法:将Edit原创 2020-07-23 22:21:52 · 1336 阅读 · 0 评论 -
【Unity】解决TextFx插件导入Bitmap字体后分辨率太低的问题
文章目录效果太长不看版背景知识1.TextFx插件2.Bitmap字体3.Unity Font效果修改前修改后太长不看版修改对应字体的导入选项中的Font Size,默认为16,改的越大,显示的字体越清晰。还有一些方法是不管用的:修改unity导入图片的max size、compression修改BMFont 导出设置中的字体大小背景知识【Unity】将文字特效Text Fx插件应用到自己的项目中1.TextFx插件自带多种文字特效,包含单字和段落。有一原创 2020-07-05 17:12:38 · 570 阅读 · 0 评论 -
【Unity】如何接入广告(技术及设计)
文章目录1.游戏盈利的方式2.Unity接入广告的原理3.选择哪家平台?4.技术教程(1)UnityAds(2)GoogleMob(3)广点通(4)有米(5)百度联盟(6)Vungle(7)穿山甲5.设计案例参考移动广告的类型:显示的位置设计:星遇的广告设计方案:1.游戏盈利的方式(1)买断(2)内购(包含计时)(3)广告2.Unity接入广告的原理有很多广告中介平台,它们可以给App...原创 2020-03-12 18:14:30 · 13514 阅读 · 1 评论 -
【Cocos Creator】(二)摄像机旋转——>地图旋转
需求:希望随着游戏进程,摄像机能够旋转,从别的角度观察地图。思路:修改摄像机的node中的rotation对视野没有任何影响,即摄像机旋转无效。改用地图旋转。 地图应该绕着anchor(0.5,0.5)旋转,所以把地图及其子物体/父物体的anchor都改为(0.5,0.5) 地图旋转之后,它的坐标系就发生了变化。对于地图上的点来说,它要和mousePos(世界坐标)相比较,就必须重...原创 2019-08-10 10:54:05 · 2144 阅读 · 0 评论 -
【Cocos Creator】(一)摄像机基本情况介绍
(一)摄像机基本情况摄像机是玩家观察游戏世界的窗口。(这句话怎么理解?后面做实验) 场景中至少需要有一个摄像机,也可以同时存在多个摄像机。 创建场景时,Creator 会默认创建一个名为Main Camera的摄像机,作为这个场景的主摄像机。1.我们先来观察一下这个游戏场景中的唯一一个摄像机 它只有一个Node组件和一个Camera组件。 在场景选中摄像机时,只是选中了一...原创 2019-07-28 11:46:37 · 6316 阅读 · 1 评论 -
【Cocos Creator 】微信小游戏排行榜UI适配
1.子域场景的整个Canvas都会被绘制到主域指定的结点上。2.子域Canvas的分辨率和主域指定结点大小比例要一致。3.主域指定结点要添加sprite组件。4.子域Canvas一定要勾选Fit height和Fit width。...原创 2019-05-29 17:09:44 · 628 阅读 · 2 评论 -
【Cocos Creator】 摄像机移动碰到的一些问题
1.摄像机移动时,GameOver图片不会移动,导致GameOver半屏显示,怎么办?解决思路:改变camera的culling mask,使得主相机不渲染UI,另外设置一个静止相机渲染UI。步骤:将包括GameOver在内的所有不会移动的UI的Group设置为“UI”(自己命名)。 在main camera的culling mask中,去掉“UI”层级。 新建一个camera,命...原创 2019-05-17 14:00:47 · 3196 阅读 · 0 评论 -
从Unity到CocosCreator(一)
一、脚本的生命周期回调Cocos Creator 为组件脚本提供了生命周期的回调函数。用户只要定义特定的回调函数,Creator 就会在特定的时期自动执行相关脚本,用户不需要手工调用它们。onLoad(Unity是Awake)组件脚本的初始化阶段,我们提供了onLoad回调函数。onLoad回调会在节点首次激活时触发,比如所在的场景被载入,或者所在节点被激活的情况下。 在o...原创 2019-04-12 11:45:12 · 4397 阅读 · 3 评论 -
【UGUI】文字/图片等渐现-停顿-渐隐的过程(DoTween插件)
//先拿到prefab的Clone的物体:GameObject go = Resources.Load<GameObject>(MainContainer.PrefabFolder+ "cueText");cueText= Instantiate(go,GameObject.Find("Canvas").transform);//开启协程StartCoroutine(cueT...原创 2018-12-17 10:22:08 · 1301 阅读 · 1 评论 -
【UGUI】为什么Unity的Button点击之后没有反应?
可能有如下原因:1.没有保留image组件,并激活。(若想隐藏图片,可以把透明度降为0)2.被比它层级更高的物体挡住了。可能是在父物体列表中的顺序比它更高。3.没有勾选Interactable。4.对应的Image没有勾选RayCast Target。5.没有设置对应的点击事件或代码错误。6.所在Canvas没有对应的EventSystem(可能是没复制过来,或者只新建了C...原创 2018-12-13 14:14:29 · 10504 阅读 · 1 评论 -
【UGUI】用鼠标滚轮控制UGUI中的Scroll View
这个需求是玩家测试出来的。本来默认按下左键就可以滑动Scroll View,但是好几个玩家一上来就用鼠标滚轮,然后只见那个Scroll View就巨缓慢地移动,令人窒息(其实从这里可以看出,这个组件本身是支持鼠标滚轮事件的,只是速度有些慢)。因此增加需求:不影响默认左键控制的情况下,使得鼠标滚轮也可以控制Scroll View的滑动。解决方案:1.直接在面板上改动Scroll Rect...原创 2018-06-08 17:39:52 · 7261 阅读 · 1 评论 -
【UGUI】Button的状态
Button 状态:Button Normal:可交互(Interactable),但没有交互时触发。Button Highlighted:鼠标只移上时触发,移开时失效。或者,鼠标移上并点击,鼠标再次点击其他地方时才失效(为了解决这个问题,可以把Navigation属性设置为None)。Button Pressed:鼠标在其上Button Down时触发。只要Button Up就失效。...原创 2018-06-11 19:50:01 · 1652 阅读 · 0 评论 -
【UGUI】选关界面滑动列表:怎么避免滑动时不小心点进去
把点进关卡的判定改为GetMouseButtonUp而不是GetMouseButtonDown。 这样的表现效果就是:当玩家滑动的时候一定是长按的,所以即使放在星球上面也不会触发进入的事件。...原创 2018-04-17 20:08:11 · 745 阅读 · 0 评论 -
【UGUI】如何改变Text的行间距
改变属性:Line Spacing原创 2018-04-16 19:46:08 · 3703 阅读 · 0 评论 -
【UGUI】如何在不改变UI元素在Canvas的渲染位置的情况下,改变渲染层级
看到了雨松大大的博客,可以给该物体添加一个Canvas组件,将override sorting属性设置为真,然后设置它的order。可以用在新手引导的时候高亮!http://www.xuanyusong.com/archives/3435...原创 2018-04-14 18:09:25 · 600 阅读 · 0 评论 -
【UGUI】Scroll View的基本使用方法
1.效果图2.目标功能:(1)在左侧有限空间内放置一系列的Toggle,滑动可以选择不同Toggle。(2)滑动文字页面/滑动条,可以看到所有文字3.实现工具: Scroll View (滚动视图,可在GameObject->UI->Scroll View处创建)4.Scroll View解析:(1)在Scroll View这个物体身上挂了Scr...原创 2018-03-25 14:32:36 · 12644 阅读 · 0 评论 -
【Unity】TextFx插件报错:startIndex + length >、Object reference not set
原因可能有:1.要生成的text物体的bitmap fonts里没有你想要显示的字解决办法:制作新的bitmap fonts。2.bitmap fonts里的txt文件不是UTF-8格式的:表现为在Unity中无法预览内容。解决办法:把txt文件保存成UTF-8格式。...原创 2019-10-17 16:57:30 · 262 阅读 · 0 评论 -
【Unity】改变阴影颜色
1.调整环境光,整个场景的颜色都会有一个调整。阴影的颜色自然也会改变。2.修改Light组件里的开启Shadow之后的strength属性,就可以控制阴影颜色的深浅。...原创 2019-03-14 19:39:43 · 7217 阅读 · 0 评论 -
【Unity】打开项目就发生crash崩溃
这是一个总结帖,把网上常见的几种解决方案整理一下:(我是用第一种方式解决的)解决方法1.删除除了Assets/ProjectSettings以外的其他文件夹,然后重新打开项目。原文链接(对于由于用不同版本Unity打开工程造成的报错也有用) Unity每次编译都会生成这个东西,不用担心丢失的问题。所以,干掉他! 缺点:如果工程过大,重新编译时间会比较长。(但是对于查Log日志来说,...原创 2019-03-04 15:50:01 · 15654 阅读 · 0 评论 -
【Unity】控制人物移动
2D1.制作移动动画:Idle、Run、Jump2.物理控制人物运动:水平方向,根据input的axis给力,提供加速度。 修改LinerDrag,调整停下来的加速度。 重力变大,会使得摩擦力变大,难以移动。可以建立一个physics material,将摩擦力设置为0.3.使用水平速度作为参数来调整走和跑动画之间的过渡。anim.setFloat();4.反向运动修改loc...原创 2020-03-04 23:05:17 · 956 阅读 · 0 评论 -
【Unity】3D数学基础笔记
学习方式:1.了解基本的数学概念 2.了解Unity内的相关内容,加强理解。第一章:3D数学介绍1.介绍•3D数学:研究在3D几何世界中的数学问题。被广泛的应用于使用计算机来模拟3D世界的领域,比如图形学,游戏,虚拟现实和动画等。•为什么要学习3D数学:掌握了3D数学的知识之后,对我们将来学习图形学、游戏制作都有很大的帮助。2.1D(数轴)•3D:three dim...转载 2019-02-25 17:06:21 · 1368 阅读 · 1 评论 -
【Unity】Unity里的搜索技巧
1.Scene Objects面板:大家一般都会用All来搜索,而Type也是一个非常好的搜索选项。可以找到挂有某个组件的所有物体。2.Project面板:可以在Assets中搜索,也可以在Assets Store中搜索。 搜索结果出来后,选择Free Assets,然后在其中挑选一个好看又不大的资源下载下来即可。3.Asset Store面板:在Window选项下选择A...原创 2019-02-14 11:44:37 · 2083 阅读 · 0 评论 -
【Unity】Bug集锦
1.NAN:not a number。 解决:如果出现了除以0或者根号下是负数的情况会出现。即数学上无法成立。2. Mathf.Lerp(0,1,Time.deltatime);始终是一个定值,没有出现预想中的渐变效果。 解决:这个函数的第三个参数就是在a和b之间按照比例取一个数(且范围是0到1),而Time.deltatime是上一帧到这一帧的时间,是一个定值。 想要...原创 2018-04-07 08:14:51 · 830 阅读 · 0 评论 -
【Unity】如何做无缝动画
问题:用了一个无缝贴图,想改变材质里的uv坐标,做一个平滑的无缝动画。结果发现动画速度不是线性诶!!!解决:原来Unity默认不是线性动画,如果想改的话要这样操作:...原创 2019-03-19 22:08:48 · 1394 阅读 · 0 评论 -
【Unity】物体爆炸,碎片横飞
效果:可以看到,主角碰到我们的巧克力之后,巧克力爆炸,碎片横飞,然后消失。思路:1.判断主角与巧克力接触2.接触到的瞬间删除巧克力(你希望爆炸的物体)。3.生成巧克力碎片的prefab(多个碎片组合成的一个物体)。给这个物体添加一个爆炸力,让它向四周飞去。一小段时间后删除碎片。给玩家一种该物体爆炸,变成碎片的感觉。实际上,该物体并没有变化,只是瞬间换成了多个碎...原创 2019-03-08 11:23:03 · 4568 阅读 · 3 评论 -
【Unity】发生碰撞检测的必要条件
翻译一下红色关键句:两个物体中任意一个必须有Rigidbody组件OnTriggerEnter(Collider)OnTriggerEnteris called when theGameObjectcollides with anotherGameObject.The givenotherColliderhas details about the trigger ev...原创 2019-03-27 16:34:11 · 1935 阅读 · 2 评论 -
【Unity】射线落点和碰撞盒&动画跳过
为什么要写开发日志呢?我发现自己不太喜欢做项目,或者说对实现需求提不起兴趣。这样对工作是非常不利的,一有机会我就想逃避,最后工作堆在一起我就爆炸了。逃避时通常喜欢追剧、追综艺、玩手机。情况好一点的话,会看书或者研究一个感兴趣的问题。但这本质上都是逃避啊。我到底喜欢做什么呢?我喜欢研究一个系统的问题,把它的前世今生、整体逻辑理清楚,我会很有成就感。而实现需求,是一个个琐碎的细节问题,...原创 2019-05-15 15:19:53 · 640 阅读 · 0 评论 -
【Unity】摄像机绕某点旋转一周
在Update函数中执行:if (turnAround) { playerCamera.RotateAround(transform.localPosition, transform.up, Time.deltaTime * rotateSpeed); degree += Time.deltaTime * rotateSpeed; if (degree >...原创 2019-06-04 13:44:16 · 2375 阅读 · 0 评论 -
【Unity】UGUI:为什么Scrollbar无法把初值设置为0
1.设置初值的方法:在面板上直接调整value的大小,即scrollbar的初值。即使你在代码中重新设置了初值,第一次显示的必定还是面板上设置的value大小。2.诡异的现象:我把value设置为0,保存后,value又自己变回了1。3.原因:content的大小太小,没有超过Scroll View大小,scroll bar无法滑动,也就是说根本就取不到value=0这个值。...原创 2019-10-04 19:05:27 · 2943 阅读 · 0 评论 -
【Unity】如何在暂停/Time.timescale=0的条件下,播放动画
Unity里面的Animation,DoTween里面的动效,都是依赖于timescale的。但是我们希望在暂停之后,依然能播放一些小动画怎么办呢?可以设置另外一个变量来代替timescale,而使这个变量在Update函数中每帧递增1/FPS。比如下面这个例子:每帧替换一张imageSource的sprite,达到一种动画播放的效果。using UnityEngine;usi...原创 2019-10-08 19:25:20 · 2027 阅读 · 0 评论 -
【Unity】C#函数引用参数的使用
用到引用参数是希望:在函数执行完毕后,传进去的变量的值也发生了改变。摘自:https://www.cnblogs.com/dyf96966/p/5483411.html 一、值参数:在使用参数时,是把一个值传递给函数使用的一个变量。对函数中此变量的任何修改都不会影响函数调用中指定的参数。(由于函数只有一个返回值,不能用作参数的多个变量值)。 二、引用参数:即函数处理的变量与函数调用中使用的变量...原创 2018-04-07 20:16:11 · 1996 阅读 · 0 评论