游戏射箭小游戏怎么玩
游戏简介
地图上共有3个射箭关卡,每个关卡对应一个射击位,站在射击位即可开启关卡。每个关卡需要在特定时间内射击一定数量的靶子。每个关卡有三次机会,但若自知成功无望也可离开射击位以重置关卡(不消耗机会)。弓箭数量不限,但必须前一支箭落地或是击中目标才能发射下一支箭,因此对待高处目标需谨慎。同时,地图上也有三个隐藏的靶子,全部找到可改变结束的恭喜语句。
游戏操作
WASD:人物移动
Shift:长按跑步
鼠标移动:视角旋转
左键:长按为弓弩蓄力,松开即发射
Q:切换天空盒
演示视频
【3d游戏编程作业5——射箭小游戏】 https://www.bilibili.com/video/BV13M411Z7Mo/?share_source=cop...
实现思路
1、弓弩移动:
使用标准资源包中的FPS预设,将弓弩设为其子物体实现
2、蓄力动画:
使用混合动画树,将零蓄动画和满蓄动画、零蓄动画和发射动画分别进行混合,并用同一个变量drawstrength设置其混合比例,在代码中修改drawstrength的值,即可实现不同蓄力程度的动画。再设置Holding变量,为真时可从Empty向Fill转移,为假时可从Fill向Shoot转移。代码中还会根据长按时间修改动画速度,使得不同的蓄力时间有着不同的动画速度。
Fill的混合树:
Fire的混合树:
3、箭运动:
为实体箭赋予刚体组件。在发射动画结束时触发动画时间,隐藏动画箭的同时将实体箭移动到动画箭的位置,并根据drawstrength设置其初速度,即可实现箭的发射与运动
4、箭的碰撞:
为箭和被碰物体设置碰撞盒,在箭进入碰撞事件时,判断碰到物体的Tag,实现不同的操作。
5、天空盒切换:
修改Renderer.skybox
6、射击位实现:
射击位设置碰撞盒并开启is Trigger,触发OnTriggerIn和OnTriggerExit时判断对象tag是否为Player,并进行相应操作。
具体代码
1、SceneController:控制场景物体的启/禁用,并处理游戏通关逻辑
2、shootaction:附着于十字弩对象,主要负责修改弩动画
3、arrowaction:附着于实体箭,主要负责箭的碰撞检测
4、LevelSet:附着于关卡对象(孩子有多个普通靶子的空对象,每关对应一个),负责控制本关的参数。
5、standplaceaction:附着于射击位,负责检测玩家的进入和退出,并据此启动/暂时关闭对应关卡
6、UserGUI:负责关卡信息与游戏结束信息显示