- 博客(47)
- 资源 (2)
- 收藏
- 关注
原创 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里,另外放在另一个类里也没问...
2019-10-15 23:12:11 1562
原创 序列化和反射
序列化是什么,反射是什么?成熟的序列化工具以及反射实现看起来好复杂,有没有简单的示例代码可以让大家体会序列化和反射的简单本质。序列化序列化是一种将数据结构或对象状态转换为比特流格式的行为,这些比特流可以在硬盘上存储,或者通过网络传输,之后再恢复为原始格式。可以不用特定的序列化代码,直接将内存数据保存/发送吗?譬如:void NaivelySendPersonStatu...
2019-08-17 17:49:26 1410
原创 BillBoard 广告牌的两种实现方式
BillBoard: 面片始终面对着摄像机。 广泛引用,eg:渲染烟雾、云朵、闪光效果。有两种实现方式:一般通过Shader实现;另外是小范围简单使用,C#脚本里Update()中使用transform.LookAt(cameraTarget),会让gameObject跟着Camera改变Rotation,保证normal始终朝向cameraTarget。public
2017-04-11 11:25:56 4619
原创 Unity运行时使用的程序集和Editor下不同
Unity运行时使用的程序集和Editor下是不一样的。同样的一行代码在MonoBehaviour下输出的结果和通过Editor的输出是不一样的。 点击“Play”按钮,Unity运行期间,上句的执行结果为:Assembly.GetExecutingAssembly: Assembly-CSharp, Version=0.0.0.0, Culture=neutral, Publi
2016-08-06 15:27:40 6275 1
原创 刀塔传奇中滚轴式UI的实现
前几年刀塔传奇火爆,其可滑动背景图的主界面设计样式也随之广为流传。时不时就有策划要求把主界面做成刀塔传奇那种多层可滑动背景的样式,即便是在一个3D游戏里…… 刀塔传奇里滚轴式UI的要点:多层(2~3层)背景图,每层有不同的移动速率,且背景图上的可交互元素(按钮)需要和所在背景图保持相同速率移动。 下面用Unity引擎,NGUI的UI插件实现此需求。 最核心的需求:背景图平移
2016-08-05 19:00:28 1247
原创 动态加载的资源一定要直接放在Resource目录下吗
动态加载的资源一定要直接放在Resource目录下吗?【除了AssetBundle】要通过Resources.Load加载的资源,不一定要放在Resources目录下。可以用放置关联资源的Prefab代替。texture、material、font等都可以这么处理,Resources目录下保留引用关系即可,资源本身可以放在Resource外面。这样做的好处:1.方便将一些资源快速改为动
2016-05-24 17:03:40 9859
原创 Unity4.x下Animator的批量处理
项目中有个需求,为了方便网络同步角色动作,需要独立出另外一套状态机,彼此状态间不互相转换,(后期加上了所有的状态自动转向Idle或running状态),即移除Animator中所有的Transition。在Unity5.x下貌似比较容易,有直接的接口。4.x下有人尝试失败了。不过我找了一下,发现还是可以实现的。如下:using UnityEngine;using System.Colle
2016-05-24 16:51:34 1609
原创 游戏中的锁定线
目的:类似“乱斗西游”,奈何桥场景中防御塔锁定角色的锁定线。 用Unity开发。尝试0 :但这些更适合在Editor中使用,Scene View中或者Debug版本中使用。 我想要的是在最终发布的游戏里能画出一条线。 尝试1:自己弄一个简单的Mesh,动态改变Vertices的位置。 void ModifyMeshTest() {
2016-05-24 16:44:23 722
原创 Unity里常用的一些路径等信息
0. Asset folder的路径:Application.dataPath; 得到的是自磁盘根目录开始的路径。0. C#自带的: string[] paths = Directory.GetFiles(Application.dataPath,"*.*",SearchOption.AllDirectories); //第三个参数可以改为SearchOption 。T
2016-05-24 16:39:04 6313 1
原创 拆分贴图的Alpha通道 --对抗ETC1的原罪
虽然手游内容越来越丰富,手游安装包资源包越来越大,却不能否认开发者们一直在努力地缩减资源包容量。以玩家为之痴狂的精美游戏贴图的处理为例,在多方权衡采用合理尺寸的同时,还在采用各种历史悠久的久经考验的高效压缩算法来进一步压缩贴图,譬如十数年前创立的ETC1压缩格式,依然被最广泛地应用在各种Android机器上。但是,ETC1居然不支持贴图的Alpha通道…… 多么坑爹坑娘的设定,为了这份原罪,无数可怜可爱的程序猿程序媛们要为ETC1的Alpha通道处理多一些辛劳。
2016-05-24 16:16:57 8609 2
原创 Unity里名字牌、血条等头顶挂件的实现
Unity里实现人物头顶的名字牌、血条的实现,网上很多博客有提到过。这里结合自己在项目中的开发,简单总结几点。UI用专门的UI相机来渲染,如何将物体的位置从主相机映射到UI相机空间。游戏的性能提升,如何减少UI的DrawCall。如何减少GC。
2015-06-20 16:51:35 9309 1
原创 《关键对话》
许久不读书了,可能是读的好书不多,被市面上坑爹坑娘的垃圾快餐恶心怕了。 今年有心在人际上提升一些,主要是谈话的情绪控制。 《关键对话》于我挺实用的。经常会因为身边人一些话动怒,甚至一时无法自控爆发冲突矛盾。曾意识到这之间的环节是因为自己心里想法的偏激,因为某种消极的想法将其他人的行为解读为恶意的攻击我的。不停说服自己要改变想法,但具体怎么改,没有深入,勉强自己说自己的一些想法不对,但事到临头依
2015-05-11 14:45:42 1539 1
原创 移除Unity工程里所有图片的Alpha通道
为测试Untiy工程里Texture的Alpha对性能的压力,需要临时移除Unity工程里所有图片的Alpha通道,做测试对比。
2015-05-05 15:41:34 3313 1
原创 Unity里包裹Debug,且不影响Debug的重定向
Debug.Log, Debug.LogWarning, Debug.LogError在工程中经常需要再包裹一层,做些定制,也方便开关Log。但有一个问题时,当用一个类将Debug包裹起来后,Console里的Log双击后,跳到的是你自己写的类的实现,而不是Log的记录处。 为此纠结了一段时间,后来偶然看到一篇日志里有写这个问题。http://www.xuanyusong.com/archives
2014-09-28 16:14:13 1912
转载 Unity 3D中的内存管理
本文欢迎转载,但烦请保留此行出处信息:http://www.onevcat.com/2012/11/memory-in-unity3d/Unity3D在内存占用上一直被人诟病,特别是对于面向移动设备的游戏开发,动辄内存占用飙上一两百兆,导致内存资源耗尽,从而被系统强退造成极差的体验。类似这种情况并不少见,但是绝大部分都是可以避免的。虽然理论上Unity的内存管理系统应当为开发者
2014-09-28 10:46:30 742 1
原创 Unity工程里图片的RGB和Alpha通道的分离,以及显示所有带有Alpha通道贴图的Material
背景:ETC1图片格式的罪孽,不支持Alpha通道。于是程序员们将一些气力浪费在Alpha通道的处理上。 为了能使用ETC1,同时某些透明效果必须有Alpha通道,一般的处理方式是将RGB和Alpha分为两张图片分别储存。 只存Alpha通道的图片及RGB都为要存的Alpha值,因为熵比较小,图片尺寸也可以相应减小一些。要做的工作:1. 将带有Alpha通道的图片,另存为两张图片,一张只存
2014-09-22 16:13:48 13388 2
原创 Unity里获取Material里所有的Texture
背景:通过Material获取Texture的接口有:Material.mainTexture, Material.GetTexture(string propertyName); 但没有一个接口可以直接获取Material的所有textures.解决方法一:利用资源依赖,EditorUtility. CollectDependencies()。static string []
2014-09-22 12:32:14 12513
原创 依然大爱的《棋魂》
第一次看棋魂,很迷sai,以至于sai消失时,代入到小光的位置,伤心不已。 第二次看棋魂,已经是7年后的2014年了,这时,sai已经不是我关注的对象了,更欣赏Toya。小一些的时候,很着迷于强大能力本身,所以对sai拥有的强大棋力钦佩不已,对小光羡慕不已,对Toya,以为只是用来烘托主角的配角,小孩子太容易被主角光环糊弄了。 而现在,看问题更客观理性一些,sai是很强大,是历史上让人钦佩不已
2014-09-20 18:07:42 695
原创 HSV颜色空间下标示数据类型
背景:类似于Unreal的Blueprint里,不同的数据类型,有不同的颜色来表示。颜色方案有RGBA, HSL,HSV。直接用RGBA当然可以,只是经常容易导致颜色偏暗饱和度不够等问题,因此,直接选用HSV。(至于为什么没有选用HSL,呵呵,没比较,团队中其他人更喜欢HSV,这个问题在业界也是众说纷纭)。令S=1.0f, V=1.0f,H则在0~359之间变化。最终显示出来必须是RG
2014-09-12 12:15:18 1741
转载 C# 中的委托和事件
C# 中的委托和事件引言委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framewo
2014-08-27 21:23:54 615 1
原创 Unity里如何停掉Coroutine, Invoke的函数的执行,以及脚本的Start()和Update()
先列出所有可选的方法:StopAllCoroutines(); //只对Coroutine起作用,会停掉此脚本里所有的Coroutine。this.enable = false; // 禁掉脚本,其实只是禁掉Start(), Update()函数,脚本里其他的东东还是有效。this.gameobject.SetActive(false); //脚本所挂靠的gameobject被
2014-08-25 18:36:12 15191 2
转载 va_start和va_end使用详解
本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表void foo(
2014-08-19 15:46:05 568
转载 cdecl、stdcall、fastcall函数调用约定区别
论函数调用约定 在C语言中,假设我们有这样的一个函数: int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保
2014-08-19 15:11:06 529 2
原创 控制Coroutine的节奏
在http://unitygems.com/advanced-coroutines/ 里展示了一个在两个Coroutine间切换的Demo。using System;using System.Collections.Generic;using System.Linq;using UnityEngine;using System.Collections;[RequireCompone
2014-08-18 20:34:53 786
原创 Unity里的协程Coroutines
Unity里的Coroutine在帮助我们实现序列化事件时尤其方便。可以让事件依次发生,可以让事件A等待事件B结束后才开始执行。但需要厘清几个基本概念。Coroutines不是多线程,不是异步技术。Coroutines都在MainThread中执行,且每个时刻只有一个Coroutine在执行。 Coroutine是一个function,可以部分地执行,当条件满足时,未来会被再次执行直到整个
2014-08-14 13:13:13 2733
原创 多线程同步用到的基本的Synchronization Object
(0) Base...//创建线程 for (i = 0; i {aThread[i] = CreateThread(NULL, // default security attributes0, // default stack size(LPTHREAD_START_ROUTINE)ThreadProc,NULL,
2014-08-12 20:28:56 755
原创 多线程的Producer/Consumer模式
Win32下多线程实现数据协同主要靠下面四种Synchronization Object:eventmutex or critical sectionsemaphorewaitable timer它们的同步主要靠WaitForSingleObject()这类的Wait Function。生产者/消费者是多线程同步里的经典模式。保证读写某个对象时不冲突我们可以
2014-08-11 17:46:34 1676
原创 Win32API下的多线程编程入门
多线程,Multi-Thread。移步别处理解Thread和Process。多线程可用多种API实现,这里用Win32 API实现最简单的多线程,线程彼此独立,不涉及线程间的数据共享。先直接上程序:
2014-08-08 18:25:10 2747
原创 C#的自定义控件
C#的UserControl让用户自定义控件容易了很多,创建WindowsFormsControlLibrary工程,自定义UserControl,生成的.dll加入到任何新工程,就能在新工程中使用自定义的UserControl。这里主要以一个例子大致记录如何使用C#里的自定义控件。
2014-08-06 22:43:57 4755
原创 Winsock Programming Basic
MSDN有一篇很好的入门教程:Getting Started with Winsockhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms738545(v=vs.85).aspx稍稍改了下:Client:#define WIN32_LEAN_AND_MEAN#include #include #in
2014-08-04 21:12:18 737
原创 Unreal里PlayerController、Player、Character之间的关系
Unreal里PlayerController、Player、Character之间的关系,要理解它们之间的关系,本质是搞明白Pawn和Controller的关系。
2014-07-31 18:42:13 7136
原创 Unreal里的输入
Unreal里的Input被我分为两类,(1)只控制Possesed Pawn的ActionEvent和AxisEvents,需要配合设置Project Settings里的Input。(2)可以控制整个场景的任何物体。用的比较多的是KeyEvents和MouseEvents,当然,如果你用摇杆外设,用的比较多的是GamepadEvents。
2014-07-31 18:37:23 1718
原创 Unreal里的AIController(2) --自动寻路
在Unreal里用它的自动寻路很简单,只要保证寻路的目标点在NavMeshBoundsVolume里就够了。
2014-07-31 18:04:43 2144
原创 Unreal里的AIController(1) --BehaviourTree
AIController如何用在角色上?需要创建的资源:CharacterBlueprint, AIControllerBlueprint, BehaviourTree, BTTask_BlueprintBase, BlackBoardData。 文中将分析这5种资源的关系。以及在用AIController时容易踩的坑。
2014-07-29 20:03:33 2308
原创 如何在Unreal里给角色绑定碰撞体
1. 在Personal里,往角色的SkeletonTree中合适的位置Add Socket。如果碰撞体要绑定到已经存在的Bone上,请略过此步骤。2. CharacterBP的Component里,按照希望的形状,添加BoxComponent\SphereComponent\CapusuleComponent,并注意调整它们的大小,也尽量调整到合适的位置。3. 在CharacterBP的
2014-07-25 17:49:38 3582
原创 Unreal里,比对CodeProject,由空工程用Blueprint搭建自己的ThirdPersonGame
记录本文只是想说明,Blueprint和代码实现保持一致,几乎看着daima
2014-07-25 15:55:27 1768
C#自定义控件
2014-08-06
DDSBatchConverter
2014-07-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人