复杂光照
在之前的学习中,我们使用的都是单一光照,实际在游戏中可能存在多个光源,不同的光源会互相影响构成真正的光照系统,在这一节我们将实现一个真正可用的光照模型。
渲染路径 Rendering Path
📖 决定了光照是如何应用到Unity Shader中的。
我们只有为Shader正确地选择和设置了需要的渲染路径,该Shader的光照计算才能被正确执行。
🏷️渲染路径的分类
前向渲染路径(Forward Rendering Path)
延迟渲染路径(Deferred Rendering Path)
顶点照明渲染路径(Vertex Lit Rendering Path)——已经被弃用
目前unity提供了新的渲染路径代替了原来的渲染路径。
默认使用 Graphics中的设置,可以在摄像机中对设置进行覆盖。
在Shader Pass中来指定该Pass使用的渲染路径:
1Pass { Tags { "LightMode" = "ForwardBase" } }
LightMode标 ...
unity 新技术
未读
InputSystem 是Unity新推出的输入管理系统。
相比传统的输入系统,InputSystem 支持对设备拔插状态监听和自定义按键映射。
以代码的方式运行
简单使用
以下为获取使用游戏手柄的方式。
12345678910111213141516171819//获取最后使用的游戏手柄var gamePad = Gamepad.current;// print(gamePad.name);//持续判断按键按下if (gamePad.dpad.up.isPressed){ print("按下 上");}//按下一次执行一次if (gamePad.dpad.up.wasPressedThisFrame){ print("按 上");}//获取左摇杆的值move = gamePad.leftStick.ReadValue();
同理可以获取键盘和鼠标的输入:
1234567891011121314151617181920//获取当前的键盘var keyboard = Keyboard.curr ...
由于Spine3.8.75网络上传播太多,所以官方针对这个版本做了限制,由该版本导出的Spine动画不能在Unity中正确读取。
修改json
在以json格式导出的动画中,可以直接编辑文件修改版本号,修改版本号后就可以被Unity正确识别了。
修改二进制
上面的方法虽然方便,但是处于对性能的考量,现在基本都是用二进制数据,通过测试发现,修改二进制文件的版本号同样可以正确使用。
但是修改二进制十分麻烦,使用二进制查看器去改位非常麻烦,而且在每次导出时都需要修改一次才能正确使用。于是我做了一个简单的小工具。
核心代码123456var fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);//找到的标志位fs.Position = 33;fs.WriteByte(9);fs.WriteByte(9);
核心代码如上,通过二进制查看器或,for循环找出需要修改的数据的位置,然后写入即可。
使用修正器属于修正的目录,就可以自动修正二进制文件,愉快的在Unity中使用了。
Ps:此方法仅供学习交流,请大家多多支持正版 ...
写在开始
此文用于简单介绍FastyTools工具集,详细使用情况后面有空我再写。😃
FastyTools是我个人一直在使用的一套Unity工具链,包含了一些Unity常用的功能封装和基础轮子,可以大大提升开发效率,我个人用起来很爽。
BaseSystem
BaseSystem是工具集的基础。
包括以下内容:
EventCenter 事件中心
MonoController 全局Mono
ObjectPool 对象池
ResLoad 资源加载
Singleton 单例
GamePlay
包括以下内容:
Bag 背包系统
Csv 处理Csv的相关操作
Localization 本地化
Music 音效管理系统
Save 存储系统
SceneSwitch 场景选择器
TurnSystem 回合制系统
任务链系统
Numerical
包括以下内容:
角色数值
数据类型枚举
玩家主角数据
Skill技能系统
Buffer系统
InputCenter
包括:
玩家输入中心
Touch输入
AI
FSM有限状态机
Astar寻路
BT行为 ...
开发思考
未读
以下用于记录我在开发《如果世界没有你》时的一些思考
《如果世界没有你》是一款互动叙事类游戏,以下简称没你,起初我在接手时,一听伪3D的对话冒险游戏,我觉得我不是轻轻松松解决嘛,事实上在实际的游戏开发中,我还是发现了一些特殊的地方,由此文记录,以便日后自己在面对类似情况时少踩坑。
策划设计方面
在这种注重游戏互动叙事的游戏中,策划设计方案显得尤为重要 ,以下从游戏性和美术学方面讨论。
游戏性
游戏性的重要组成是游戏的核心玩法,对于普遍的解密探索类游戏来说,通过玩家点击,找到相关线索,使用道具,推进故事。
12graph LR 玩家互动 --> 寻找线索--> 使用相关道具--> 推进故事
这是一套大家总结出来的通用的游戏流程,也是市面上最多的游戏流程。
拿第一个场景(学校)来说几个可交互地点:
学校大门
猫
商店
路牌
作为一个不大的场景,有4个交互点,其实并不算少,只是我们能否在有限的空间内利用出最大的效能,让玩家能够记住这个场景(除了外形之外情节上的记忆)。如果我们只是在这4个交互点显示一些暗淡冰冷的文字,玩家对于这些交互大概也不会留下什么感情,而 ...
说明
在我们制作如下的提示框时,会使用到IPointerEnterHandler, IPointerExitHandler
但是,会出现提示框闪烁(其实是进入离开疯狂调用)
解决方案
将提示框射线检测去掉(避免新生成的提示框隔断)
控制提示框的锚点远离一些
为提示框添加组件
每年目标
未读
此文用于计划2022年的目标。
🔝 总体目标
[x] 找到一份合适工作
[ ] 购置一台4K显示器
[ ] 发布一套课程
[ ] Bili Bili 粉丝>3000
📜 Unity技术目标
研究新的技术配套游戏框架
[ ] UIElement 学习
[ ] 考虑设计一套资源管理器替换Odin
[x] GraphView 学习 (尝试之后考虑使用原先的xnode方式)
[x] 设计一套通用的 graph 框架
[x] 移植天赋树系统
Shader
[ ] shader入门精要
❤️美术音乐目标
为了独立游戏梦,程序员也要学美术音乐😄。
这个部分的目标较为不明确,会将学习成果记录在下面的各项中。
绘画
考虑学习像素画和板绘,角色原画,特效等
动画
考虑学习Spine骨骼2D动画
建模
考虑学习Blender的角色建模,简单场景的搭建
编曲
学习基础乐理和常用的电子乐器,目标是能编制简单的曲子。
💭 项目目标
[ ] 完善卡牌游戏
[ ] 制作一个练手塔防游戏
📚 读书目标
读一点杂书,开阔自己的视野。
阅读2本 ...
说明
以下是关于一个游戏存档的设计,包括截取游戏画面,记录时间和存储数据等内容,记录一下,以备以后回顾。
大致的效果如下,将所有存档展示出来,有截图对应,点选载入存档。
123var path = Application.persistentDataPath + "/aa111.png";print($"PATH:{path}");ScreenCapture.CaptureScreenshot(path);// 截图并保存截图文件
结合存档系统,就可以设计出如下所示的存档功能
12345678/// <summary> /// 游戏管理器 /// </summary> public class GameManager : SingletonManager<GameManager> { public int startScene = 1; public int startLine = 0; }
软件选择
在软件选择上,对于我这种没有绘画基础的程序员来说,果断选择了轻量级的Aseprite。
工作界面
工作界面
如图可以看到工作界面,在界面上有菜单栏、颜色选择器、工具栏、主工作区和动画帧图层工作区几个部分组成。
快捷键
快捷按键
作用
B
画笔
L
线条工具
U
形状工具
D
轮廓工具,它的功能是在你画出任意形状的轮廓之后将这个轮廓自动填充颜色。这个工具能让你快速绘制任意形状的实色物体。
I
拾色器
G
油漆桶
前言
🔹ScrollView是我们经常使用的一个UI组件,但时常容易忘记具体的使用细节,故在此文予以记录。++主要用于需要滑动的区域++
ScrollView组件如图所示
组成部分
ScrollView包含Content、Scrollbar、OneValueChange三部分组成。
Content用于显示内容,通过mask遮罩来过滤大于显示区域的内容。
Scrollbar用于滚动条、
OneValueChange 用于滚动监听
使用示例
++注意在Content中设定好大小,保证能够包裹所有子物体++
也可以添加
制作完成效果如图所示:











