UE4里的Delegate Delegate的本质是回调,是观察者模式的应用。A里产生变化需要与A1,A2,A3有交互。有3种方式:方式1:A里调用A1, A2,A3的方法。方式2:A1, A2, A3里调用A的方法。方式3:弄一个中间者,Event/Delegate,A不用知晓A1, A2,A3的存在,A1,A2,A3也不用知道A的存在(Event/Delegate可以不用放在A里,另外放在另一个类里也没问...
序列化和反射 序列化是什么,反射是什么?成熟的序列化工具以及反射实现看起来好复杂,有没有简单的示例代码可以让大家体会序列化和反射的简单本质。序列化序列化是一种将数据结构或对象状态转换为比特流格式的行为,这些比特流可以在硬盘上存储,或者通过网络传输,之后再恢复为原始格式。可以不用特定的序列化代码,直接将内存数据保存/发送吗?譬如:void NaivelySendPersonStatu...
BillBoard 广告牌的两种实现方式 BillBoard: 面片始终面对着摄像机。 广泛引用,eg:渲染烟雾、云朵、闪光效果。有两种实现方式:一般通过Shader实现;另外是小范围简单使用,C#脚本里Update()中使用transform.LookAt(cameraTarget),会让gameObject跟着Camera改变Rotation,保证normal始终朝向cameraTarget。public
Unity运行时使用的程序集和Editor下不同 Unity运行时使用的程序集和Editor下是不一样的。同样的一行代码在MonoBehaviour下输出的结果和通过Editor的输出是不一样的。 点击“Play”按钮,Unity运行期间,上句的执行结果为:Assembly.GetExecutingAssembly: Assembly-CSharp, Version=0.0.0.0, Culture=neutral, Publi
刀塔传奇中滚轴式UI的实现 前几年刀塔传奇火爆,其可滑动背景图的主界面设计样式也随之广为流传。时不时就有策划要求把主界面做成刀塔传奇那种多层可滑动背景的样式,即便是在一个3D游戏里…… 刀塔传奇里滚轴式UI的要点:多层(2~3层)背景图,每层有不同的移动速率,且背景图上的可交互元素(按钮)需要和所在背景图保持相同速率移动。 下面用Unity引擎,NGUI的UI插件实现此需求。 最核心的需求:背景图平移
动态加载的资源一定要直接放在Resource目录下吗 动态加载的资源一定要直接放在Resource目录下吗?【除了AssetBundle】要通过Resources.Load加载的资源,不一定要放在Resources目录下。可以用放置关联资源的Prefab代替。texture、material、font等都可以这么处理,Resources目录下保留引用关系即可,资源本身可以放在Resource外面。这样做的好处:1.方便将一些资源快速改为动
Unity4.x下Animator的批量处理 项目中有个需求,为了方便网络同步角色动作,需要独立出另外一套状态机,彼此状态间不互相转换,(后期加上了所有的状态自动转向Idle或running状态),即移除Animator中所有的Transition。在Unity5.x下貌似比较容易,有直接的接口。4.x下有人尝试失败了。不过我找了一下,发现还是可以实现的。如下:using UnityEngine;using System.Colle
游戏中的锁定线 目的:类似“乱斗西游”,奈何桥场景中防御塔锁定角色的锁定线。 用Unity开发。尝试0 :但这些更适合在Editor中使用,Scene View中或者Debug版本中使用。 我想要的是在最终发布的游戏里能画出一条线。 尝试1:自己弄一个简单的Mesh,动态改变Vertices的位置。 void ModifyMeshTest() {
Unity里常用的一些路径等信息 0. Asset folder的路径:Application.dataPath; 得到的是自磁盘根目录开始的路径。0. C#自带的: string[] paths = Directory.GetFiles(Application.dataPath,"*.*",SearchOption.AllDirectories); //第三个参数可以改为SearchOption 。T
拆分贴图的Alpha通道 --对抗ETC1的原罪 虽然手游内容越来越丰富,手游安装包资源包越来越大,却不能否认开发者们一直在努力地缩减资源包容量。以玩家为之痴狂的精美游戏贴图的处理为例,在多方权衡采用合理尺寸的同时,还在采用各种历史悠久的久经考验的高效压缩算法来进一步压缩贴图,譬如十数年前创立的ETC1压缩格式,依然被最广泛地应用在各种Android机器上。但是,ETC1居然不支持贴图的Alpha通道…… 多么坑爹坑娘的设定,为了这份原罪,无数可怜可爱的程序猿程序媛们要为ETC1的Alpha通道处理多一些辛劳。
Unity里名字牌、血条等头顶挂件的实现 Unity里实现人物头顶的名字牌、血条的实现,网上很多博客有提到过。这里结合自己在项目中的开发,简单总结几点。UI用专门的UI相机来渲染,如何将物体的位置从主相机映射到UI相机空间。游戏的性能提升,如何减少UI的DrawCall。如何减少GC。
《关键对话》 许久不读书了,可能是读的好书不多,被市面上坑爹坑娘的垃圾快餐恶心怕了。 今年有心在人际上提升一些,主要是谈话的情绪控制。 《关键对话》于我挺实用的。经常会因为身边人一些话动怒,甚至一时无法自控爆发冲突矛盾。曾意识到这之间的环节是因为自己心里想法的偏激,因为某种消极的想法将其他人的行为解读为恶意的攻击我的。不停说服自己要改变想法,但具体怎么改,没有深入,勉强自己说自己的一些想法不对,但事到临头依
Unity里包裹Debug,且不影响Debug的重定向 Debug.Log, Debug.LogWarning, Debug.LogError在工程中经常需要再包裹一层,做些定制,也方便开关Log。但有一个问题时,当用一个类将Debug包裹起来后,Console里的Log双击后,跳到的是你自己写的类的实现,而不是Log的记录处。 为此纠结了一段时间,后来偶然看到一篇日志里有写这个问题。http://www.xuanyusong.com/archives
Unity 3D中的内存管理 本文欢迎转载,但烦请保留此行出处信息:http://www.onevcat.com/2012/11/memory-in-unity3d/Unity3D在内存占用上一直被人诟病,特别是对于面向移动设备的游戏开发,动辄内存占用飙上一两百兆,导致内存资源耗尽,从而被系统强退造成极差的体验。类似这种情况并不少见,但是绝大部分都是可以避免的。虽然理论上Unity的内存管理系统应当为开发者
Unity工程里图片的RGB和Alpha通道的分离,以及显示所有带有Alpha通道贴图的Material 背景:ETC1图片格式的罪孽,不支持Alpha通道。于是程序员们将一些气力浪费在Alpha通道的处理上。 为了能使用ETC1,同时某些透明效果必须有Alpha通道,一般的处理方式是将RGB和Alpha分为两张图片分别储存。 只存Alpha通道的图片及RGB都为要存的Alpha值,因为熵比较小,图片尺寸也可以相应减小一些。要做的工作:1. 将带有Alpha通道的图片,另存为两张图片,一张只存
Unity里获取Material里所有的Texture 背景:通过Material获取Texture的接口有:Material.mainTexture, Material.GetTexture(string propertyName); 但没有一个接口可以直接获取Material的所有textures.解决方法一:利用资源依赖,EditorUtility. CollectDependencies()。static string []
依然大爱的《棋魂》 第一次看棋魂,很迷sai,以至于sai消失时,代入到小光的位置,伤心不已。 第二次看棋魂,已经是7年后的2014年了,这时,sai已经不是我关注的对象了,更欣赏Toya。小一些的时候,很着迷于强大能力本身,所以对sai拥有的强大棋力钦佩不已,对小光羡慕不已,对Toya,以为只是用来烘托主角的配角,小孩子太容易被主角光环糊弄了。 而现在,看问题更客观理性一些,sai是很强大,是历史上让人钦佩不已