Unity3d 打飞碟 物理运动版

2023-10-30

Unity3d 打飞碟-物理运动版

github 传送

视频演示

题目要求

改进飞碟(Hit UFO)游戏:

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

Adapter 模式

  • 运动学和动力学的物体运动存在区别。在 unity3d 中两种方式会产生不同的效果。使用 adapter 模式,使得游戏能支持两种方式的运动。

  • uml 图变化如下,增加了一个接口和方法,场景控制器通过接口调用该方法,而具体的不同的动作控制类将实现该接口,方便场控的调用。
    在这里插入图片描述

实现

效果如下
在这里插入图片描述

  • 和上一个版本的主要区别是添加了刚体后,飞碟碰撞会反弹。

主要写一下修改的地方。

接口

  • 根据模式变化,需要修改接口。新加一个 IActionManager 接口。另外,在 userAction 中添加了 getMode()switchMode() 方法,方便 GUI 获取当前模式和在动力学 (Dynamics) 模式,即物理运动,和运动学 (Kinematics) 模式之间进行切换。
namespace Interfaces {
   
    public interface ISceneController {
   }

    public interface UserAction {
   
        void Hit(Vector3 pos);
        int getScore();
        int getRound();
        bool getMode();
        void stopGame();
        void Restart();
        void switchMode();
    }

    public enum SSActionEventType: int {
    Started, Completed}

    public interface ISSActionCallback {
   
        void SSActionCallback(SSAction source);
    }

    public interface IActionManager {
   
        void MoveDisk(Disk disk);
    }
}

CCPhysisAction 的添加

  • CCMoveToAction 一个道理,CCPhysisAction 也是一个继承了 SSAction 的具体的运动类。CCMoveToAction 是基于运动学的动作变换,是通过计算物体中心的运动方程,轨迹,位移,速度,旋转来直接变换游戏对象;CCPhysisAction 考虑了物体实际的重力和本身的形状,外部力对物体的影响,使游戏对象的运动更加逼真。
  • 通过物理引擎更新的 CCPhysisAction 类需要使用 FixedUpdate (尽管这里只需要在 start() 中赋一次初始速度,无需在 FixedUpdate 中一直添加速度,但为了区别,我还是写了一个 FixedUpdate),所以在其继承的 SSAction 中添加了一个 FixedUpdate 虚函数,然后在 CCPhysicAction 中实现。而需要重写的 Update 函数空着即可。
public class CCPhysisAction : SSAction {
   
    public float speedx, speedy, speedz;
    public float gravity = 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity3d 打飞碟 物理运动版 的相关文章

  • Linux 硬链接 软连接

    情景说明 有时候在Linux下我们有一个大的工程跟绝对路径相关 现在又想通过eclipse查看源码和修改源码 那么问题来了 1 如果我们把源码拷贝一份到eclipse工程里面 那么此时修改了某个文件之后还得手动复制到可以运行的原始工程目录下
  • 管理学之父德鲁克:目标管理的八要素和七步骤

    管理学之父德鲁克 目标管理的八要素和七步骤 转 一 目标管理 MBO 的内涵 1954年 管理大师彼得 德鲁克在其名著 管理的实践 中提出了 目标管理 的概念 并提出了 目标管理和自我控制 的主张 彼得 德鲁克认为 并不是有了工作才有目标

随机推荐