作业要求:改进打飞碟游戏
 游戏内容要求:
 按下面adapter模式设计图修改飞碟游戏
 使它同时支持物理运动与运动学(变换)运动

1. 物理引擎的改进版本思路与实现
由于游戏逻辑和界面都没有必要改变,物理引擎的引用就是关于飞碟运动的部分,所以仅仅需要对Action相关的类进行改进即可。

在原来的类的基础上,加上利用物理引擎的组件RigidBody进行物体的运动。
RigidBody主要用到以下功能:

自动添加重力,也就是勾选的Gravity(默认),也就是说不必思考如何向下加速的运动
AddForce的函数,给物体施加力。这里的目的主要是给物体一个初速度让其模拟飞碟被抛出的运动,所以这个力不必持续施加,只需在飞出的时候添加一段极小时间即可。所以选择使用ForceMode.Impulse这个模式,瞬间力,符合我们的目的。
至于物体碰撞旋转之类的,可以通过冻结某个轴的旋转来使飞碟更加稳定。
好,那么接下来,我们需要添加一个物理运动的类,基类还是基本的SSAction,只需要继承并实现多态即可。

PhysicsAction

直接上代码:

为了代码能够服用,函数传入参数不做改变,但是内在逻辑改变,也就是说行为变化,但是接口还是同一个,实现多态。由于在运动学实现中,需要目标方向,以及一个速度,而物理引擎中,是通过添加力的方式来实现运动,所以这里简单将目标方向target和speed相乘,表示力的方向和大小。然后返回action
在Update里,由于力不能持续施加,所以需要判断是否第一次施加。施加了之后物体就有一个初速度,然后随着重力的作用,做抛物线运动。

PhysicsManager

动作管理器也类似,保持函数接口不变,直接执行RunAction就可以了,但是有一点要注意的是,由于飞碟工厂在创建的时候并不知道是否采用物理运动,所以不会飞碟实例添加刚体,需要在动作管理器实现给物体添加刚体,注意飞碟会复用,不能重复添加。

新接口类IActionManager

由于两个类(物理运动和运动学)都有同样的函数,不同的实现,而在Controller里面调用的时候,需要一个统一的接口所以新建一个接口:

动作管理器基类的变化

由于动力学和物理运动使用的更新帧函数是不同的(一个FixedUpdate,一个Update)所以在管理器中也应当实现两个Update函数,分别执行动作类的两个Update函数。
代码如下:

Controller变化

由于需要选择运动的模式,所以需要另外创建一个枚举变量,设置不同的状态,并且给控制器添加相应的动作管理器:

UI变化

在UI上设置相应的按钮,在游戏开始的时候设置相应的Mode就可以了。相当于将原本的Play按钮分裂成两个Mode选择按钮:

UI效果如下:

改进后的游戏效果:

HW6:物理系统与碰撞相关推荐

  1. Unity物理系统中碰撞体、刚体、isKinematic、isTrigger的关系(附动画演示)

    Unity物理系统中碰撞体.刚体.isKinematic.isTrigger的关系 写在前面 产生碰撞的条件 产生触发的条件 实验一:蓝块(碰撞体).红块(碰撞体) 实验二:蓝块(碰撞体).红块(碰撞 ...

  2. 2D物理系统——碰撞器

    1.碰撞器 碰撞器是用于在物理系统中表示物体体积的形状或范围,刚体通过得到碰撞器的范围信息进行计算,判断两个物体的范围是否接触,如果接触刚体就会模拟力的效果产生速度和旋转 2.2D碰撞器 补充: 边界 ...

  3. Unity 物理系统 -- 碰撞体简介(碰撞、触发条件)

    Unity 物理系统 -- 碰撞体简介(碰撞.触发条件) 几个常用的碰撞体: Box Collider:盒碰撞体,盒碰撞体是一个立方体外形的基本碰撞体,该碰撞体可以调整为不同大小的长方体,可用作门.墙 ...

  4. 【Unity】物理系统的静态碰撞体、刚体碰撞体、Kinematic刚体碰撞体

    碰撞体分为三类(触发器同理):静态碰撞体.刚体碰撞体.Kinematic刚体碰撞体. 静态碰撞体:不挂载刚体组件的碰撞体 常用于地形.障碍物等不会移动位置的物体,物理引擎会对此优化性能.在游戏运行时, ...

  5. 不使用物理系统判断两个矩形是否碰撞

    如图所示,不使用物理系统去检测两个物体是否碰撞的效果. 注意:两个物体如果一直相交,在Update中处理的时候会一直输出,在实际使用时需要注意相交时的处理. 直接上代码: 检测碰撞使用的是两个节点,节 ...

  6. Cocos 物理系统

    官方文档链接:https://docs.cocos.com/creator/2.3/manual/zh/physics/physics/physics-manager.html Cocos 物理系统 ...

  7. Cocos2d-x v3.0物理系统 利用PhysicsEditor创建多边形

    Cocos2d-x 3.0的新物理系统我就不必多说了,接触一段时间,感觉还是不错的.对于那些基本概念,网上的教程已经泛滥了,就不多说了,不过对于创建多边形物体的教程,还真不多,很多都是创建圆形和矩形, ...

  8. arcade 物理系统_如何使用Python和Arcade库创建2D游戏

    arcade 物理系统 对于那些学习编程的人来说, Python是一种出色的语言,它对于想要"完成工作"并且不花很多时间在样板代码上的人来说是完美的语言. Arcade是一个用于创 ...

  9. Games104 Lecture 11 物理系统:高级应用

    物理系统:高级应用 1 角色控制器 1.1 构建一个控制器 1.2 角色控制器的特点和小细节: 2 布娃娃系统 Ragdoll 3 衣料模拟 3.1 基于mesh的衣料模拟 4 破坏模拟 5 载具模拟 ...

最新文章

  1. HTML(5)+CSS(3)--那些不知道但重要的知识!
  2. 【面试招聘】如何写出发光的简历|附10个模版
  3. hexo的landfarz主题侧栏靠左
  4. DOM加载过程中ready和load的区别
  5. java学习(87):Interage包装类进制转换
  6. (Docker实战) 第六篇:建立持续集成环境03
  7. 计算机二级ms通过率,计算机二级office通过率高吗
  8. 流媒体下载的几种方法
  9. CS5216 Capstone DP to hdmi 1080p转换器或者转接线设计原理|CS5216 DP转HDMI转换电路原理图
  10. Bzoj 2563: 阿狸和桃子的游戏 题解
  11. 树莓派烧写OpenWrt系统后外接4G模块实现4G路由即MiFi
  12. 详解 P沟道mos管与N沟道mos管
  13. avr单片机流水灯程序c语言,AVR单片机学习C语言的流水灯验证
  14. fpga在线升级 linux_以Flash控制器为核心的FPGA在线更新功能实现设计流程介绍
  15. 声音/声学成像2021-4-13
  16. 计算机网络验证性实验
  17. Cadence 如何创建元件库与元件
  18. Linux应用开发【第十章】RTC应用开发
  19. 聊聊c#与Python以及IronPython
  20. 物流自动化分拣系统信息体系架构

热门文章

  1. 一些常用的「a」标签分享方法
  2. 西门子1200与FANUC机器人Profinet通讯
  3. 如果把一张大图分开matlab,如何把一张大图分开在几张A4纸上打印出来
  4. 实现html表单下划线可输入/css实现input只显示下划线
  5. stm32最小系统USB转TTL接线
  6. 脱欧导致IT公司在英国开展业务充满变数
  7. SpringBoot-yaml语法规则和读取数据
  8. Oracle 快速入门 PL/SQL游标
  9. 年会抽奖源码html js,js年会抽奖程序
  10. 机械臂的力矩前馈控制