游戏设置指南
在游戏开发中,各项功能的设置和优化是打造精彩游戏体验的关键。以下将详细介绍如何设置游戏中的各种功能,包括物品交互、场景布置、角色移动以及特殊效果等方面。
物品与库存交互优化
为了让视图对象和库存更好地协同工作,我们可以在每次打开库存屏幕时调用相应函数。具体操作如下:
1. 在
ToggleMode
函数的
else
子句顶部添加
StashViewObjects ();
,用于收起正在显示的视图对象。
2. 保存脚本。
3. 点击“播放”按钮,当消息显示在屏幕上时尝试打开库存。
若希望消息在被拾取后立即被读取,只需更改
ObjectLookup
数据中的两行内容:
1. 停止播放模式。
2. 选择消息对象。
3. 将
Lookup State 1
更改为
default,0,MessageView,1,s1_Camera Inventory,0
。
4. 将
Reply State 1
更改为 “You pick up the Message to see what it says”。
5. 点击“播放”按钮测试重新安排的功能。
隐藏消息
完成功能设置后,接下来将消息隐藏在锁着的箱子里:
1. 选择箱盖,关闭其网格渲染器。
2. 选择消息对象,将其移动到箱子底部,并调整大小以适应内部空间。
3. 打开箱盖的网格渲染器,将消息拖到
AnimationObjects
组中。
4. 删除基座对象。
5. 在层次视图中,将消息拖到
AnimationObjects
组中。
6. 开启“播放时最大化”选项。
7. 点击“播放”按钮进行测试。
更新库存对象状态
为了完善钥匙和锁的功能,需要更新库存对象的初始状态:
1. 将所有库存对象的初始状态设置为 0。
2. 选择“Key At Rock”对象。
3. 将
Lookup State 1
更改为
default,0,Iron Key Icon,1
。
4. 将
Reply State 1
更改为 “You drop the key carelessly into your pack”。
5. 选择锁板对象。
6. 将
Lookup State 1, Element 1
更改为
Iron Key Icon,2, Iron Key Icon,0,KeyAtLock,1,b0_ChestLid,2
。
7. 将
Reply State 1, Element 1
更改为 “The key slips in and turns with a satisfying snick”。
8. 选择“Key At Lock”对象。
9. 将
Lookup State 1
更改为
default,0,b0_ChestLid,1,LockPlate,1,Iron Key Icon,1
。
10. 点击“播放”按钮测试该序列。
11. 保存场景和项目。
寻找金色袖套
利用在迷宫中定位对象的方法,隐藏激活水晶所需的金色袖套:
1. 将第一人称控制器移动到迷宫入口。
2. 从
NPC Assets
、
NPC Characters
文件夹中选择托盘布对象,并将其放置在第一人称控制器前方。
3. 调整其高度,使其在迷宫区域地面上方约 0.8 个单位(Y 位置约为 55.655),以便第一人称控制器能有良好的视野。
4. 在层次视图中找到金色袖套,并将其放置在场景中的托盘上。
5. 缩放托盘大小以匹配袖套(约为 1.4)。
6. 在层次视图中将金色袖套拖到托盘布对象上。
7. 将托盘布重命名为 “TrayCloth Floating”。
8. 为其添加盒形碰撞器。
9. 将
V_PositionCycler
脚本添加到托盘上。
10. 将上下范围设置为 0.03。
11. 点击“播放”按钮观察效果。
接下来,将金色袖套和浮动托盘设置为动作对象:
1. 退出播放模式。
2. 选择金色袖套。
3. 为其添加
Interactor
(和
ObjectLookup
)脚本。
4. 根据
StateManagement PDF
填写脚本内容。
5. 将其标记为动作对象。
6. 对浮动托盘重复上述步骤。
7. 点击“播放”按钮尝试拾取金色袖套对象。
为了处理拾取金色袖套后托盘的处理问题,需要在
MazeFX
脚本中添加相应逻辑:
1. 打开
MazeFX
脚本。
2. 添加变量
var trayClothFloating : GameObject;
。
3. 在
Start
函数中查找对象:
function Start () {
trayClothFloating = GameObject.Find("TrayCloth Floating");
}
-
在
OnTriggerExit函数中添加以下代码:
// if the golden sleeve has been acquired, deactivate the tray
if (trayClothFloating.GetComponent(Interactor).currentState == 2) {
trayClothFloating.GetComponent(Interactor).ProcessObject(0);
}
- 保存脚本。
- 点击“播放”按钮。
- 进入和离开迷宫进行测试。
- 拾取金色袖套后再次进入和离开迷宫,此时空托盘应消失。
利用
Transporter
脚本设置托盘的位置:
1. 将
Transporter
脚本拖到浮动托盘对象上。
2. 勾选“启动时运输”选项。
3. 点击“播放”按钮,确保托盘在迷宫中随机变换位置。
4. 小心不要改变 Y 位置,将托盘组移动到迷宫内部,以防在变换位置前在启动时被看到。
为了防止玩家操作迷宫抽屉时托盘被困,需要在
TriggerMusicDrawer
脚本中添加逻辑:
1. 打开
TriggerMusicDrawer
脚本。
2. 添加变量:
var dropObject : GameObject; // the tray
//var nPC : GameObject; // the Gimbok group
-
在
DoTheJob函数底部添加以下代码:
//check objects currently in maze
dropObject.SendMessage("BeamMeUpScotty",SendMessageOptions.DontRequireReceiver);
//nPC.SendMessage("RecheckPosition",SendMessageOptions.DontRequireReceiver);
- 保存脚本。
-
将托盘分配给
DrawerMusic的“Drop Object”参数。 -
点击“播放”按钮,多次拾取
DrawerMusic,确保每次迷宫重置后托盘都会重新定位。
筏子之旅
玩家可以在不解决谜题的情况下乘坐筏子从瀑布后面取回小瓶。具体操作如下:
1. 选择水盆对象并聚焦。
2. 选择“Vial of Elixir”对象,使用“移动到视图”功能将其放置在水盆中。
3. 为小瓶添加
Interactor
(和
ObjectLookup
)脚本。
4. 根据
StateManagement PDF
设置脚本内容。
5. 将其标记为动作对象。
6. 将
Lookup State 1
设置为
default,0,Vial of Elixir Icon,1
。
7. 将
Reply State 1
设置为 “You carefully fit the vial into your pack”。
如果有专业版,可以为水盆对象尝试使用玻璃折射着色器:
1. 导入“Glass Refraction (Pro Only)”包。
2. 选择水盆对象,找到其材质“Simple Water Still”。
3. 复制该材质并命名为“Simple Refractive Water”。
4. 将其着色器更改为
FX ➤ Glass ➤ Stained Bump Distort
。
5. 添加
WaterBumpLow
法线贴图。
6. 将新材质添加到水盆对象上。
7. 点击“播放”按钮,调整其失真滑块。
若使用延迟光照,需要将水盆向下移动。
为了让筏子移动,需要修改
V_PositionCycler
脚本:
1. 选择并聚焦筏子对象。
2. 选择
V_Position Cycler
脚本。
3. 复制并将新脚本重命名为
Hz_Position Cycler
。
4. 在脚本编辑器中,使用搜索和替换功能将
y
更改为
z
。
5. 将两个范围变量设置为 0.0。
6. 保存脚本并将其拖到筏子上。
7. 点击“播放”按钮,调整“Up Range”值,直到筏子到达对岸(约为 22)。
8. 将速度设置为约 0.4。
9. 满意设置后,停止播放模式并使其永久生效。
为了增加趣味性,还可以为筏子添加一些起伏运动:
1. 将
V_PositionCycler
脚本添加到筏子上。
2. 将“Up Range”设置为 0.2,“Down Range”设置为 0.05,速度设置为 0.35。
3. 将第一人称控制器移动到该区域。
4. 点击“播放”按钮乘坐筏子。
5. 下筏子并从瀑布后面的水盆中拾取小瓶。
死亡区域设置
处理玩家掉入水中的情况,需要设置“死亡区域”:
1. 选择“死亡区域”对象。
2. 暂时打开其网格渲染器,查看其位置。注意它设置为“Is Trigger”,玩家可以穿过它。
3. 创建一个新脚本并命名为
DeathZone
。
4. 添加以下两个变量:
var spawnPoint: Transform[]; // array of possible positions
var blackout : GameObject;
- 添加以下函数:
function OnTriggerEnter () {
//Instantiate(blackout); // trigger a fade in/out
var element : int = Random.Range(0, spawnPoint.length); // choose a position from the array
yield new WaitForSeconds(1.5);
gameObject.Find("First Person Controller").transform.position = spawnPoint[element].position;
}
- 保存脚本。
- 将其添加到“死亡区域”对象上。
设置重生点:
1. 点击“播放”按钮,将玩家移动到你想要设置为重生点的位置。
2. 选择第一人称控制器。
3. 从“GameObject”菜单中选择“Align View to Selected”。
4. 停止播放模式。
5. 创建一个新的空游戏对象。
6. 从“GameObject”菜单中选择“Align with View”。
7. 将其命名为 “SpawnPoint”。
8. 选择“DeathZone”对象,将“Spawn Point”数组大小设置为 1。
9. 将“SpawnPoint”对象拖到“DeathZone”组件的“Spawn Point Element 0”字段中。
10. 根据需要更改数组大小并添加更多位置。
11. 点击“播放”按钮,通过跳入水中测试新的死亡区域。
12. 退出播放模式。
黑屏效果设置
为了在玩家传送时实现黑屏效果,使用带有动画不透明度的纹理:
1. 在层次视图中选择“Crossfade”对象。
2. 复制并将其命名为 “Generic Crossfade”。
3. 将其从
GameEnvironment
组中拖出,以便正确定位。
4. 将其 X 和 Y 位置设置为 0。
5. 在检查器中,注意它由一个使用小白色纹理的 GUI 纹理对象组成。
6. 查看其动画组件,它有三个动画,“crossfade” 被指定为默认动画,并且勾选了“自动播放”选项。
7. 从“Window”菜单中打开动画编辑器。
8. 打开
GUITexture
下拉菜单,选择
color.a
轨道。
9. 开启录制,点击“播放”按钮,然后点击停止,使视图缩放至曲线。整个动画需要三秒钟,屏幕会变黑然后再次变清晰。
为了在指定时间后销毁预制体,需要修改
TimedDestructor
脚本:
1. 关闭动画编辑器。
2. 打开
TimedDestructor
脚本,其中包含一个时间变量和一行销毁对象的代码:
var time : float = 1.5;
Destroy (gameObject,time); //destroy object after the specified amount of seconds seconds
- 在检查器中,确保“Generic Crossfade”对象的时间设置为 3。
- 点击“播放”按钮,查看效果并观察“Generic Crossfade”从层次视图中消失。
- 停止播放模式。
为了确保淡入淡出效果在相机层之上,需要将其分配到
In View
层:
1. 在项目视图中,将“Crossfade”分配到
In View
层。
2. 在
Adventure Prefabs
文件夹中创建一个新的预制体并命名为 “Crossfade”。
3. 从层次视图中将“Generic Crossfade”对象拖到预制体上。
4. 从场景中删除“Generic Crossfade”。
5. 将“Crossfade”预制体分配给“死亡区域”的“Blackout”参数。
6. 打开
DeathZone
脚本,取消注释
Instantiate
行。
7. 保存脚本。
8. 点击“播放”按钮,通过跳入水中进行测试。
9. 保存场景和项目。
定位水晶
将之前创建的落石和水晶功能移动并适配到地球神龛:
1. 更新水晶的
Lookup State 1
为
default,0,Crystal Icon,1
。
2. 将水晶移动到地球神龛对象附近。
3. 将岩石预制体拖到层次视图中,靠近地球神龛。
4. 选择岩石区域并将其移动到地球神龛。
5. 打开岩石区域的网格渲染器,以便调整其大小和位置。
6. 调整岩石区域,使其略低于地球符文,且不超出有洞的奇怪长凳范围。
7. 将岩石预制体和水晶放置在天花板和岩石区域碰撞器之间。
8. 像往常一样在检查器顶部更新预制体。
9. 关闭岩石区域的网格渲染器。
10. 点击“播放”按钮观察结果。
11. 如有必要,调整水晶的位置,以增加其向前落入可拾取位置的机会。
12. 从场景中删除岩石预制体。
触发落石
将地球符文设置为动作对象,以触发落石和水晶显示:
1. 选择神龛中的地球符文对象。
2. 为其添加
Interactor
(和
ObjectLookup
)脚本,并根据
StateManagement PDF
设置。
3. 将其标记为动作对象。
4. 将
Lookup State 1
设置为
default,2,s1_Earth Glyph,2
。
5. 将
Reply State 1
设置为 “The glyph slips out of your hand as you pry it loose.”。
6. 创建一个新脚本并命名为
CueThePhysics
。
7. 添加以下代码:
function DoTheJob () {
gameObject.AddComponent (Rigidbody); // adds the rigidbody component
yield new WaitForSeconds(0.5); // give it time to start falling
rigidbody.AddForce(-50, 0, 0); // push it away from the wall in the X direction
yield new WaitForSeconds(10); // wait for 5 seconds to let it play out and react
rigidbody.isKinematic = true; // disable physics
yield;
Destroy(this); // kill the script to prevent retriggering
}
- 保存脚本。
- 将其应用到地球符文上。
- 点击“播放”按钮,拾取符文,观察刚体组件的添加和脚本的移除。
- 停止播放模式。此时,水晶已在玩家可触及范围内。
通过以上详细的设置步骤,我们可以逐步完善游戏中的各种功能,为玩家带来更加丰富和精彩的游戏体验。在实际开发过程中,可根据具体需求对各项设置进行调整和优化。
游戏设置指南
各功能设置总结与流程梳理
为了更清晰地理解整个游戏设置过程,我们可以将上述各个功能的设置步骤进行总结梳理,形成一个更有条理的流程。以下是一个简单的 mermaid 流程图,展示了从物品与库存交互优化到触发落石等一系列功能设置的主要流程:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(物品与库存交互优化):::process --> B(隐藏消息):::process
B --> C(更新库存对象状态):::process
C --> D(寻找金色袖套):::process
D --> E(筏子之旅):::process
E --> F(死亡区域设置):::process
F --> G(黑屏效果设置):::process
G --> H(定位水晶):::process
H --> I(触发落石):::process
从这个流程图中可以看出,整个游戏设置是一个逐步推进的过程,每个功能的设置都建立在前一个功能的基础之上。接下来,我们再通过一个表格来详细对比各个功能设置的关键步骤和要点:
| 功能模块 | 关键步骤 | 要点说明 |
|---|---|---|
| 物品与库存交互优化 |
1. 在
ToggleMode
函数
else
子句顶部添加
StashViewObjects ();
2. 更改
ObjectLookup
数据中的两行内容
| 确保视图对象和库存协同工作,实现消息拾取后立即读取 |
| 隐藏消息 |
1. 关闭箱盖网格渲染器
2. 移动消息对象到箱子底部 3. 打开箱盖网格渲染器并将消息拖入
AnimationObjects
组
| 将消息隐藏在锁着的箱子里 |
| 更新库存对象状态 |
1. 设置所有库存对象初始状态为 0
2. 更改多个对象的
Lookup State
和
Reply State
| 完善钥匙和锁的功能 |
| 寻找金色袖套 |
1. 移动和调整托盘布及金色袖套位置
2. 设置动作对象和脚本逻辑 3. 使用
Transporter
脚本设置托盘位置
| 隐藏激活水晶所需的金色袖套 |
| 筏子之旅 |
1. 放置小瓶在水盆中并设置脚本
2. 修改
Hz_Position Cycler
脚本控制筏子移动
3. 添加筏子起伏运动 | 实现玩家乘坐筏子取回小瓶的功能 |
| 死亡区域设置 |
1. 创建
DeathZone
脚本并添加变量和函数
2. 设置重生点 | 处理玩家掉入水中的情况 |
| 黑屏效果设置 |
1. 复制并设置
Generic Crossfade
对象
2. 修改
TimedDestructor
脚本
3. 将
Crossfade
分配到
In View
层
| 实现玩家传送时的黑屏效果 |
| 定位水晶 |
1. 更新水晶
Lookup State 1
2. 移动水晶和岩石预制体到地球神龛附近 3. 调整岩石区域位置和大小 | 将落石和水晶功能适配到地球神龛 |
| 触发落石 |
1. 将地球符文设置为动作对象并添加脚本
2. 创建
CueThePhysics
脚本并应用到地球符文
| 触发落石和水晶显示 |
功能测试与优化建议
在完成上述所有功能的设置后,需要进行全面的测试,以确保游戏的稳定性和流畅性。以下是一些测试要点和相应的优化建议:
物品交互测试
- 测试内容 :检查消息是否在拾取后立即显示,金色袖套和小瓶是否能正确拾取并放入库存,地球符文拾取后是否能触发落石和水晶显示。
-
优化建议
:如果消息显示不正常,检查
ObjectLookup数据的更改是否正确;若物品拾取出现问题,查看Interactor和ObjectLookup脚本的设置是否符合StateManagement PDF的要求。
场景移动测试
- 测试内容 :测试筏子是否能正常往返于岸边和瀑布之间,玩家在筏子上的移动是否流畅,第一人称控制器在迷宫和各个场景中的移动是否正常。
-
优化建议
:若筏子移动异常,检查
Hz_Position Cycler脚本的设置,特别是范围和速度参数;如果玩家移动出现卡顿或异常,检查场景中的碰撞器和脚本逻辑。
特殊效果测试
- 测试内容 :验证死亡区域是否能正确将玩家传送到重生点,黑屏效果是否能正常显示和消失。
-
优化建议
:若死亡区域传送不正常,检查
DeathZone脚本中的变量和函数是否正确;如果黑屏效果有问题,查看Generic Crossfade对象的设置和TimedDestructor脚本的时间参数。
拓展与创新思路
在完成基本功能设置和测试后,还可以根据游戏的主题和风格进行一些拓展和创新,以提升游戏的趣味性和吸引力。以下是一些拓展思路:
增加谜题元素
可以在迷宫中设置更多的谜题,例如需要玩家通过特定顺序操作物品或解开密码才能继续前进。这可以通过添加新的脚本和逻辑来实现,例如创建一个新的谜题脚本,根据玩家的操作判断是否解开谜题。
丰富角色交互
可以为游戏中的角色添加更多的交互功能,例如玩家可以与 NPC 对话获取线索或任务。这需要创建新的角色对象和对话系统,通过脚本实现对话逻辑和任务分配。
优化视觉效果
除了现有的黑屏效果和玻璃折射效果,可以进一步优化游戏的视觉效果,例如添加光影效果、粒子效果等。可以使用游戏引擎提供的特效工具或编写自定义脚本实现这些效果。
通过以上的总结、测试、优化和拓展,我们可以不断完善游戏的功能和体验,打造出一款更加精彩的游戏。在实际开发过程中,要根据具体情况灵活运用各种技术和方法,不断探索和创新,为玩家带来独特的游戏体验。
超级会员免费看
4万+

被折叠的 条评论
为什么被折叠?



