复杂光照在之前的学习中,我们使用的都是单一光照,实际在游戏中可能存在多个光源,不同的光源会互相影响构成真正的光照系统,在这一节我们将实现一个真正可用的光照模型。
渲染路径 Rendering Path
:book: 决定了光照是如何应用到Unity Shader中的。
我们只有为Shader正确地选择和设置了需要的渲染路径,该Shader的光照计算才能被正确执行。
:label:渲染路径的分类
前向渲染路径(Forward Rendering Path)
延迟渲染路径(Deferred Rendering Path)
顶点照明渲染路径(Vertex Lit Rendering Path)——已经被弃用
目前unity提供了新的渲染路径代替了原来的渲染路径。
默认使用 Graphics中的设置,可以在摄像机中对设置进行覆盖。
在Shader Pass中来指定该Pass使用的渲染路径:
1Pass { Tags { "LightMode" = "ForwardBase" } }
Lig ...
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.curre ...
由于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:此方法仅供学习交流,请大家多多支持正 ...
开发思考
未读
以下用于记录我在开发《如果世界没有你》时的一些思考
《如果世界没有你》是一款互动叙事类游戏,以下简称没你,起初我在接手时,一听伪3D的对话冒险游戏,我觉得我不是轻轻松松解决嘛,事实上在实际的游戏开发中,我还是发现了一些特殊的地方,由此文记录,以便日后自己在面对类似情况时少踩坑。
策划设计方面在这种注重游戏互动叙事的游戏中,策划设计方案显得尤为重要 ,以下从游戏性和美术学方面讨论。
游戏性
游戏性的重要组成是游戏的核心玩法,对于普遍的解密探索类游戏来说,通过玩家点击,找到相关线索,使用道具,推进故事。
12graph LR 玩家互动 --> 寻找线索--> 使用相关道具--> 推进故事
这是一套大家总结出来的通用的游戏流程,也是市面上最多的游戏流程。
拿第一个场景(学校)来说几个可交互地点:
学校大门
猫
商店
路牌
作为一个不大的场景,有4个交互点,其实并不算少,只是我们能否在有限的空间内利用出最大的效能,让玩家能够记住这个场景(除了外形之外情节上的记忆)。如果我们只是在这4个交互点显示一些暗淡冰冷的文字,玩家对于这些交互大概也不会留下什么感情,而且 ...
说明在我们制作如下的提示框时,会使用到IPointerEnterHandler, IPointerExitHandler
但是,会出现提示框闪烁(其实是进入离开疯狂调用)
解决方案
将提示框射线检测去掉(避免新生成的提示框隔断)
控制提示框的锚点远离一些
为提示框添加组件
说明以下是关于一个游戏存档的设计,包括截取游戏画面,记录时间和存储数据等内容,记录一下,以备以后回顾。
大致的效果如下,将所有存档展示出来,有截图对应,点选载入存档。
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
油漆桶
前言
:small_blue_diamond:ScrollView是我们经常使用的一个UI组件,但时常容易忘记具体的使用细节,故在此文予以记录。++主要用于需要滑动的区域++
ScrollView组件如图所示
组成部分
ScrollView包含Content、Scrollbar、OneValueChange三部分组成。
Content用于显示内容,通过mask遮罩来过滤大于显示区域的内容。
Scrollbar用于滚动条、
OneValueChange 用于滚动监听
使用示例++注意在Content中设定好大小,保证能够包裹所有子物体++
也可以添加
制作完成效果如图所示:
++2021++年不知不觉就过去了,不知道为什么,我感觉时间过得越来越快了:slightly_smiling_face:.
!!回首过去的一年里,我好像也没做什么事情!!
前言
我向来觉得对自己的生活进行阶段性记录是很有必要的,通过这种方式可以记录下很多东西,在迷茫时看看从前的自己说不定能获得什么能量吧~
关于自设框架数值系统引入了数据修改器的概念,所以对于游戏的各种数据都需要分门别类的管理,特别是针对于Character的数据。
任务系统
buff系统关于Buff系统在我的自制框架中,制作了一版实时的,在开发回合制卡牌游戏原型时,发现回合制的Buff和实时的Buff有较大差别,重新设计了一版回合制的,考虑在之后放入到自制框架中。
关于我开始成为Up主
在Bilibili投稿成为偶像?哈
兴趣点大概是想要获得一些成就感来鼓励自己单调的生活吧,我开始发布一些编程相关的教程和知识分享,教别人的学习效率大概是自学的2倍吧:heart:,同时也希望能够记录自己的成长。
视频收益哈哈哈,在制作视频的时候我是没想过能够在经济上有什么获得的,但现在b站的投稿大环境还是挺好的,各种各样的活动和 ...
游戏项目
未读
现在是 2022年12月29日 16:22:06 没想到拖了整整一年才捡起这件事。
回顾整个项目,虽然完成了很多通用的模块,但这些模型也仅仅只是demo级别,尚还缺乏验证,且游戏设计思想仍然不够完整,对于游戏地图的设计也缺乏确定的解决方案。











