qframework

Unity 游戏框架搭建 2019 (九~十二) 第一章小结&第二章简介&第八个示例

不羁的心 提交于 2020-11-22 06:47:03
第一章小结 为了强化教程的重点,会在合适的时候进行总结与快速复习。 第二章 简介 在第一章我们做了知识库的准备,从而让我们更高效地收集示例。 在第二章,我们就用准备好的导出工具试着收集几个示例,这些示例中有的是我们后续库的基础工具,也有的是在项目中非常实用的小工具,还有一些示例是实践了在框架搭建方向上非常重要的 C# 语法知识。 第二章大纲如下。 第八个示例(一) 在之前,我们完成了一个导出的功能。但是在完成这个功能的过程中,我们也遇到了一些问题。我们回忆一下,在《MenuItem 复用》的这篇文章中,我们想对如下代码进行复用。 using System; #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public class ExportUnityPackage : MonoBehaviour { #if UNITY_EDITOR [MenuItem("QFramework/4.导出 UnityPackage")] private static void MenuClicked() { var assetPathName = "Assets/QFramework"; var fileName = "QFramework_" + DateTime.Now

Unity 游戏框架搭建 2019 (五十六) 需求分析-架构中最重要的一环

99封情书 提交于 2020-08-17 03:20:25
需求分析-架构中最重要的一环 我们的项目开始立项的时候,最常见的一个情况就是:几个人的小团队,一开始什么也不做,就开始写代码,验证逻辑,游戏就开始写起来了。而公司的一些所谓的领导层面一开始就把游戏定义为我们要做一个大作。这个事情本身就是一个笑话,因为没有任何的规划和设计,我们就妄图写出一个杰出的作品出来是不现实的。Unity 在好用,那么以这个心态去做游戏,一定会写不出来好的游戏来。— 刘钢《Unity 项目架构设计与开发管理》 以上这段话说得很清楚了,就是做一个项目的时候一定要做规划和设计,当然这是从整个项目的角度来看,但作为开发者,对我们来说就要从技术上进行规划和设计,而技术上的规划和设计其实就是要做架构。 架构要做什么? 在项目的初期,我们直接把架构理解为准备即可。我们仔细回忆一下在一个项目的准备阶段,我们都会做什么? 笔者一般是先分析需求,需求分析清楚了,就会对需求进行模块拆分,拆分之后就会去逐个验证技术难点,这时候会选择一些插件等等。等验证完毕就算是准备完毕了。 当然这一系列操作是笔者主动意识下完成的,但是其实还有很多习惯性的操作,比如用 QFramework、用公司的代码规范。 这就是笔者的准备阶段做的事情了。当然项目不是笔者一个人做的,而是有多个人做,而笔者的模块拆分阶段就已经可以把项目的工作量进行拆分了,而团队成员都是按照模块进行分工的。

小班同学学习经历分享(一)游戏程序员成长札记

假如想象 提交于 2020-08-14 20:32:51
作者信息 昵称:目及远方 课程设计 HumanFramework: https://github.com/cyclons/HumanFramewo 正文 大四毕业,心血来潮,闲余之际,撰文留念。 萌芽 游戏程序员,把这个分成两块的话就是,游戏,程序。 这两个中,只有一个,游戏,在我很小的时候就开始接触,在那个视电子游戏如电子海洛因,父母抵制到要送孩子去网瘾治疗所的年代,三年级的我就已经在玩ps2了,周围的同学还在玩红警qq大乱斗冒险岛飞车的时候,我已经玩高达战神龙珠古墓丽影,最终导致和周围同学没有共同话题。 随后,按顺序入手了nds,psp,xbox360,ps4,可以说从小到大,游戏没有停过。 如果说这条职业路上我有什么超前之处,就是玩游戏玩得多。 起步 那什么时候开始想做游戏了呢?要等到大学。 整个大一的我沉浸在社团干事与学习中,完全没有接触过游戏编程,学了个谭浩强的c语言,寒假里把下学期的高数学了一遍,然后发现课堂上除了能装个逼好像也没什么特别大用。 直到下半学期的一天夜里,我在床上思考,以后究竟干什么比较好,突然一个念头冒出来,要不去做游戏吧!这个想法一冒出来,我猛地从床上坐了起来,仿佛一股能量贯穿了全身一般,于是我下定决心买一台电脑,开始我的程序之路。 暑假的时候,搜了好久,终于找到一个感觉靠谱的教程,那就是SIKI,现在已经是游戏网课的巨头了

小班同学学习经历分享(一)游戏程序员成长札记

时间秒杀一切 提交于 2020-07-29 09:57:45
作者信息 昵称:目及远方 课程设计 HumanFramework: https://github.com/cyclons/HumanFramewo 正文 大四毕业,心血来潮,闲余之际,撰文留念。 萌芽 游戏程序员,把这个分成两块的话就是,游戏,程序。 这两个中,只有一个,游戏,在我很小的时候就开始接触,在那个视电子游戏如电子海洛因,父母抵制到要送孩子去网瘾治疗所的年代,三年级的我就已经在玩ps2了,周围的同学还在玩红警qq大乱斗冒险岛飞车的时候,我已经玩高达战神龙珠古墓丽影,最终导致和周围同学没有共同话题。 随后,按顺序入手了nds,psp,xbox360,ps4,可以说从小到大,游戏没有停过。 如果说这条职业路上我有什么超前之处,就是玩游戏玩得多。 起步 那什么时候开始想做游戏了呢?要等到大学。 整个大一的我沉浸在社团干事与学习中,完全没有接触过游戏编程,学了个谭浩强的c语言,寒假里把下学期的高数学了一遍,然后发现课堂上除了能装个逼好像也没什么特别大用。 直到下半学期的一天夜里,我在床上思考,以后究竟干什么比较好,突然一个念头冒出来,要不去做游戏吧!这个想法一冒出来,我猛地从床上坐了起来,仿佛一股能量贯穿了全身一般,于是我下定决心买一台电脑,开始我的程序之路。 暑假的时候,搜了好久,终于找到一个感觉靠谱的教程,那就是SIKI,现在已经是游戏网课的巨头了

Unity 游戏框架搭建 2019 (四十二) MonoBehaviour 简化

谁说我不能喝 提交于 2020-05-06 14:21:56
在前两篇,我们完成了第九个示例。为了完善第九个示例,我们复习了类的继承,又学习了泛型和 params 关键字。 我们已经接触了类的继承了。接触继承之前,把类仅仅当做是方法的集合,接触了继承之后,我们的类还可以使用继承来解决一些问题。 第十个示例 在 Unity 中,我们的脚本都往往继承自 MonoBehaviour,继承了之后我们就可以在脚本内编写很多功能。比如访问 transform/gameObject,再比如控制动画接收碰撞事件等等。另外我们继承了 MonoBehaviour 才能被作为脚本挂到 GameObject 上。 仅仅是通过继承,MonoBehaviour 的很多功能都能够进行复用。所以继承的一个作用就是代码复用。而我们知道方法也可以代码复用,泛型可以对结构进行复用。那么继承能是复用什么? 继承既能复用代码也能复用结构。不过术业有专攻,有的情况下使用方法进行复用更合理,有的情况下适用于泛型,当然也有适用继承的情况。 像 GameObjectSimplify 和 TransformSimplify,这两种方法集,目前其实通过继承来实现会更好一点。因为这两个类中的方法全部都是要传一个固定的对象进去的,比如 GameObjectSimiplify 的每个方法第一个参数都是 GameObject 参数,而 TransformSimplify 也是如此

Unity 游戏框架搭建 2019 (四十一) 泛型:结构复用利器

孤街浪徒 提交于 2020-05-04 18:48:40
在上一篇我们使用 object 解决了方法结构重复的问题,而在文章的尾部又提了一下更好的方法,就是泛型。 泛型对很多初学者来说是比较高级的概念,这里呢我们顺便复习一下泛型。 泛型是什么呢?对于方法来说,方法结构中的部分或全部类型都可以先不进行定义,而是到调用方法的时候再去定义。 我们的 GetRandomValue 的目前代码如下 : public static object GetRandomValueFrom(object[] values) { return values[Random.Range(0, values.Length)]; } 测试代码如下: var intRandomValue = (int)GetRandomValueFrom(new int[]{1,2,3}); var stringRandomValue = (string)GetRandomValueFrom(new string[]{"asdasd","123123"}); var floatRandomValue = (float)GetRandomValueFrom(new float[]{ 0.1f,0.2f }); 将 object 改成泛型后如下: public static T GetRandomValueFrom<T>(T[] values) { return values[Random

Unity 游戏框架搭建 2019 (三十九、四十) 第四章 简介与方法的结构重复问题

╄→尐↘猪︶ㄣ 提交于 2020-05-01 21:14:54
第四章 简介 方法的结构重复问题 我们在上一篇正式整理完毕,从这一篇开始,我们要再次进入学习收集示例阶段了。 那么我们学什么呢?当然是学习设计工具,也就是在上篇中提到的关键知识点。这些关键知识点,大部分来自于 C# 语法。 不过在此之前,我们先实现一个功能,这个功能是,传入几个数字,随机取出其中一个数字。 比如传入 1,3,5,7 从这四个数字中随机取出一个数字出来。 其实现很简单 代码如下: using UnityEngine; namespace QFramework { public partial class MathUtil { public static int GetRandomValueFrom(int[] values) { return values[Random.Range(0, values.Length)]; } } } 传入一个,int 数组,从 int 类型数组中随机取一个数值进行返回。 用法也很简单,使用代码如下: var randomValue = GetRandomValueFrom(new int[] {5, 100, -1, -3, 5}); 但是随着时间发展,我们有时候会需要随机获取其他类型值,比如从一个 float 类型的数组中随机取回一个 float 值,或者是从 string 类型的数组中取回一个值。 难道我们要每个类型都实现一次嘛?

# Unity 游戏框架搭建 2019 (三十四、三十五) 9 ~ 10 示例整理

余生长醉 提交于 2020-04-26 18:27:54
第九个示例 目前代码如下: using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif namespace QFramework { public class ResolutionCheck { #if UNITY_EDITOR [MenuItem("QFramework/9.屏幕宽高比判断")] #endif private static void MenuClicked() { Debug.Log(IsPadResolution() ? "是 Pad 分辨率" : "不是 Pad 分辨率"); Debug.Log(IsPhoneResolution() ? "是 Phone 分辨率" : "不是 Phone 分辨率"); Debug.Log(IsiPhoneXResolution() ? "是 iPhone X 分辨率" : "不是 iPhone X 分辨率"); } /// <summary> /// 获取屏幕宽高比 /// </summary> /// <returns></returns> public static float GetAspectRatio() { return Screen.width > Screen.height ? (float) Screen.width / Screen

Unity 游戏框架搭建 2019 (三十、三十一) MenuItem 显示顺序问题 & 类的提取

北城余情 提交于 2020-04-24 13:39:33
在上一篇,我们得出了两个核心的学习思路: 根据问题去学习,并收集。 主动学习,并思考适用场景。 我们今天解决 MenuItem 显示顺序问题。 目前 MenuItem 显示如图所示: 我们来看下 MenuItem 这个属性构造的定义。 第二个参数是,是否是验证方法,目前不用理解,官网上默认是 false。 第三个参数,意思是优先级,表示 MenuItem 所在的显示顺序,数值越大越在底部。 我们先给第七个示例试一下。将代码改成如下: using System.IO; #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public class CustomShortCut : MonoBehaviour { #if UNITY_EDITOR [MenuItem("QFramework/7.自定义快捷键 %e",false,-10)] private static void MenuClicked() { var generatePackageName = Exporter.GenerateUnityPackageName(); EditorUtil.ExportPackage("Assets/QFramework",generatePackageName + "

Unity 游戏框架搭建 2019 (二十七、二十八)弃用的代码警告解决&弃用的代码删除

妖精的绣舞 提交于 2020-04-14 13:21:06
【推荐阅读】微服务还能火多久?>>> 在前两篇,我们把所有的示例重头到尾整理了一遍。 当前的状态如下: 要做的事情: (完成) 备份:导出文件,并取一个合理的名字。 遗留问题: (完成) 第八个示例与之前的示例代码重复,功能重复。 (完成) 方法所在类的命名有问题。 菜单栏显示顺序问题。 弃用的代码警告 约定和规则: 每个示例在 QFramework 目录下创建一个文件夹,文件夹的格式是: 数字.示例的功能 每个示例写一个脚本,脚本中包含可复用的静态方法和 MenuItem 方法。 每写一个示例进行一次导出,导出的文件名后边加上日期和时间,这个功能已经在导出功能里内置了。 每次有 API 变更的时候做一次备份,备份的名字采用 QFramework_vX.Y.Z 格式。 每次进行整理的时候要确保是在功能有效的情况下进行删除和变更。 示例分类: 知识学习&收集 API 收集 C# 语法实践 库本身的功能 规则实现 使用流程提供及优化 效率提升(编码体验、逻辑复用) 项目实用工具收集 我们看下以上遗留问题里,示例重复这个做完了,还差一个菜单栏显示顺序问题,还有一个弃用的代码的警告。 两个看起来,弃用代码的警告马上就有思路了,就只要保证功能正确的情况下重写代码就好了。 我们看下编辑器的弃用代码警告: 目前有 5 个警告,主要集中在示例 7 和把中。我们一项一项解决。 先看示例七的代码: