本文是3D游戏编程与设计第六次作业的博客,内容为使游戏“打飞碟(Hit UFO)”支持物理运动

目录

  • 任务说明
  • 代码说明
    • FirstController
    • DiskPhysicFlyAction
    • UserGUI
    • FlyActionManager
    • SSAction / SSActionManager
  • 成果展示

任务说明

“打飞碟(Hit UFO)”第一版代码Gitee,博客CSDN
在本次任务中,主要内容为改进 Hit UFO(打飞碟)小游戏,包括

  • adapter模式 设计图修改飞碟游戏
  • 使它同时支持物理运动与运动学(变换)运动

代码说明

第二版源代码Gitee
此处仅说明与本次版本改进有关的类,其余类的说明请参考第一版博客
注:第二版的飞碟预制中加入 Rigidbody 刚体组件

FirstController

FirstController中的改动有两处:

  1. 在 SendDisk 中通过标志位 isPhysic 决定飞碟为物理运动还是运动学运动

    private void SendDisk(int type) {... if(isPhysic)action_manager.DiskFly(disk, speed);elseaction_manager.DiskFly(disk, angle, speed);
    }
    
  2. 新增接口 setPhysic 提供给 UserGUI 使用

    public void setPhysic(bool obj){isPhysic = obj;
    }
    

DiskPhysicFlyAction

DiskPhysicFlyAction 是物理运动类,与运动学运动类DiskFlyAction实现思路类似,不同的是修改物理引擎相关组件属性,需要使用FixedUpdate(),因为物理引擎中只需要将力作用到物体上(Start()中实现),所以我们在FixedUpdate()中将移动到屏幕外的飞碟回收即可,而不需要像DiskFlyAction中位移飞碟来模拟运动。

public class DiskPhysicFlyAction : SSAction {private Vector3 start_vector;                              public float power;private DiskPhysicFlyAction() { }public static DiskPhysicFlyAction GetSSAction(int lor, float power) {DiskPhysicFlyAction action = CreateInstance<DiskPhysicFlyAction>();if (lor == -1) {action.start_vector = Vector3.left * power;}else {action.start_vector = Vector3.right * power;}action.power = power;return action;}public override void Update() { }public override void FixedUpdate() {if (transform.position.y <= -10f) {gameobject.GetComponent<Rigidbody>().velocity = new Vector3(0, 0, 0);this.enable = false;  }}public override void Start() {gameobject.GetComponent<Rigidbody>().AddForce(start_vector * 10, ForceMode.Impulse);}
}

UserGUI

为物理运动和运动学运动的选择增加按钮

 void OnGUI () {if (started) {...if (GUI.Button(new Rect(50, 100, 100, 50), "Physic")) {action.setPhysic(true);}if (GUI.Button(new Rect(50, 200, 100, 50), "NOT Physic")) {action.setPhysic(false);}}...}

FlyActionManager

在FlyActionManager中为物理运动的飞碟重载DiskFly,当不使用物理引擎时启用isKinematic运动学变换,当使用物理引擎时关闭

 public DiskPhysicFlyAction ph_fly;public void DiskFly(GameObject disk, float power) {disk.GetComponent<Rigidbody>().isKinematic = false;int leftOrRight = 1;if (disk.transform.position.x > 0) leftOrRight = -1;ph_fly = DiskPhysicFlyAction.GetSSAction(leftOrRight, power);this.StartAction(disk, ph_fly);}

SSAction / SSActionManager

在SSAction中添加

 public virtual void FixedUpdate() {throw new System.NotImplementedException();}

在SSActionManager中修改Update()

 protected void Update() {...foreach (KeyValuePair<int, SSAction> actionKV in actionsRunning) {SSAction action = actionKV.Value;if (action.enable) {action.Update();action.FixedUpdate();} ...}...}

使其适配物理引擎FixedUpdate()

成果展示

开始

物理运动

运动学运动

结束

3D-06-打飞碟(物理运动)相关推荐

  1. 打飞碟物理运动兼容版

    上次我们做了一个打飞碟的游戏,当时的打飞碟是运动学的模式,即并没有像现实生活中的一样受到重力,摩擦力等因素的影响.这次我们将为我们的打飞碟游戏添加物理运动,即让我们的飞碟受到物理因素的影响, 为了能重 ...

  2. Unity 3D游戏六:打飞碟物理引擎

    文章目录 前言 游戏要求 游戏分析 游戏实现 总结 选做题:打靶游戏 前言 中山大学数据科学与计算机学院3D游戏课程学习记录博客. 游戏代码: gitee 游戏视频: bilibili 参考师兄的博客 ...

  3. js实现椭圆轨迹_Canvas实现直线与圆形的物理运动效果

    导语:之前写过几篇关于canvas实现圆环动画的文章,例如这篇:canvas绘制旋转的圆环百分比进度条和使用HTML5 Canvas arc()绘制圆形/圆环,实现方法是通过循环绘制圆环(圆饼)等来实 ...

  4. 【游戏开发实战】Unity 2D游戏物理运动曲线轨迹预测,以愤怒的小鸟为例,轨迹曲线云团圈圈

    文章目录 一.前言 二.思考分析 三.场景搭建 1.导入图片素材 2.鸟预设 3.地面环境 4.曲线的点预设 5.预览效果 四.代码 1.鸟脚本:Bird.cs 2.曲线预测器:Trajectory. ...

  5. 使用稀疏 4D 卷积对 3D LiDAR 数据中的运动对象进行后退分割(IROS 2022)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨泡泡机器人 来源丨 泡泡机器人SLAM Receding Moving Object Segme ...

  6. Three.js实现汽车3D展示/开关门/变色/运动/视角切换/波动热点/汽车模型

    1,介绍 该示例使用Three.js库 r141版本. 主要实现功能:使用Three.js实现引入汽车模型,汽车3D展示,开门关门动画,运动,变色,视角切换,显示波动热点标签. 效果图如下: 参考案例 ...

  7. xBIM 基础06 将STEP物理文件转换为XML

    系列目录    [已更新最新开发文章,点击查看详细]  一.STEP标准简介 STEP,它是Standard for the Exchange of Product model data的缩写. 产品 ...

  8. Windows Nano Server安装配置详解06:在物理机中部署NanoServer

    在物理机中部署Nano Server的步骤和在虚拟机中加载VHD部署有类似之处,下面把不同的地方罗列出来. 1)在生成VHD文件的过程中,需要添加-OEMDrivers参数,意思是为大多数普通硬件安装 ...

  9. 等保培训.06.安全管理和物理测评

    文章目录 背景知识 安全管理的定义 技术和管理的区别 技术和管理的联系 测评依据和内容 测评依据 测评内容 测评方法和流程 主要测评工具 测评方式 访谈 检查 检查与访谈关系 测评工作前期准备 现场测 ...

  10. 3D游戏(3)——空间与运动

    1.简答并用程序验证[建议做] 游戏对象运动的本质是什么? 游戏对象的运动过程本质上就是游戏对象的空间位置(Position).旋转角度(Rotation).大小(Scale)三个属性随着时间在做某种 ...

最新文章

  1. Axure中推动拉动元件不生效_单线图标元件库SVG矢量图标 纯净无干扰的Axure元件库...
  2. isight参数优化理论与实例详解_案例1(ISIGHT集成ADAMS CAR方法实现)
  3. android 相对布局_【学习】安卓212相对布局的练习含代码版
  4. 组合枚举——妖梦拼木棒(洛谷 P3799)
  5. mysql binlog php处理_MySQL数据的binlog处理方法
  6. 1、环境搭建、Helloworld
  7. 在ASP.NET页面中实现数据饼图(转载)
  8. 【C++编程技巧】根据字符串中的指定字符作为分界将字符串拆分
  9. Linux基本操作笔记
  10. m6A去甲基化酶激活/抑制检测试剂盒实验原理
  11. 学历是铜牌,能力是银牌,人脉是金牌,思维是王牌
  12. Linux的nc,局域网文件互传
  13. Android anr模拟,ANR 的模拟
  14. N! hdu 1042
  15. Blender 利用遮罩剔除顶点
  16. vmware搭建多台虚拟机-桥接模式
  17. java输出GPA,简单的C GPA计算器问题
  18. Androd高清平板应用推荐之挖财2.0
  19. 中国燃料电池行业“十四五”规划及需求规模分析报告2021-2027年
  20. hutool 合并单元格

热门文章

  1. MySQL和SQLyog安装配置教程
  2. 红宝书第四版的一个错误?
  3. python批量处理text_【RhinoPython】Rhino如何批量替换text 和Dot
  4. 简单典型二阶系统_非典型二阶系统的特性
  5. php laravel 下载远程图片
  6. 基于python的人脸识别开题报告怎么写_开题报告-人脸识别系统的研究与实现
  7. python微信商城_GitHub - pythonsir/nideshop: NideShop 开源微信小程序商城服务端(Node.js + ThinkJS)...
  8. 最新MTK刷机工具资料(SP_Flash_Tool_exe_Windows_v5.1844.00.000)
  9. redhat7 安装 docker
  10. 智慧校园信息化建设方案