Unity3D项目六:简单打飞碟(物理引擎)

unity控制鸟的飞行模式 前言 在很多游戏中都会有控制飞行物的情况,可以通过研究对于鸟的控制来了解一些飞行模式 1,如何控制鸟飞行 为了尽量模拟鸟的飞行方式,采用下面的控制策略: 移动: 按住W键控制鸟向前加速到最大速度并保持 按住S键控制鸟减速到最小的速度 不按住W键和S键则鸟同样缓慢减速 转向: Space键控制鸟向下飞 Shift键控制鸟向上飞 不按Space键和Shift键则鸟上下角度回正 A键和D键则控制物体左转和右转 2,通过代码来实现相关功能 移动的代码实现: 首先定义一个float变量speedOne作为控制 阅读详情

简单打飞碟(物理引擎)

游戏规则与要求

  • 游戏内容要求:
    1. 按 adapter模式 设计图修改飞碟游戏
    2. 使它同时支持物理运动与运动学(变换)运动

附加项目

附加项目简单打靶

项目地址与演示视频

项目地址 -> 传送门?

视频连接 -> 传送门?

演示视频与运动学版本无较大差别。

具体实现

在上次作业的基础上增加使用物理引擎的动作管理类,并在场景控制器中对两个动作管理类进行选择即可。

  • 首先,若要使用物理引擎,我们需要使用刚体(Rigidbody)组件,刚体组件不能通过Update()函数来刷新,Update()的调用速率默认是60次/秒,受到机器性能和被渲染物体的影响,但是物理引擎渲染是一个固定的时间,是可以设置的。

    在Edit->ProjectSetting->Time:
    在这里插入图片描述

    所以对于刚体的更新我们需要用FixedUpdate()函数来实现。

  • 在SSActionManager.cs中,加上FixedUpdate,使动作管理类可以适配物理引擎:

    //对于字典中每一个pair,看是执行还是删除
    foreach (KeyValuePair<int, SSAction> kv in actions) {
        SSAction ac = kv.Value;
        if (ac.destroy) {
            waitingDelete.Add(ac.GetInstanceID());
        }
        else if (ac.enable) {
            ac.Update();
            ac.FixedUpdate(); //-----适配物理引擎
        }
    }
    
  • 在SSAction.cs中同样加上FixedUpdate()。

    public virtual void Update() {
        throw new System.NotImplementedException();
    }
    //-----适配物理引擎
    public virtual void FixedUpdate() {
        throw new System.NotImplementedException();
    }
    
  • PhysisDiskFlyAction.cs

    与DiskFlyAction大同小异,将所有操作都放进FixedUpdate(),当飞碟落到屏幕外时将飞碟的速度清空。Start()中对飞碟施加一个冲击力(Impulse)。

    public class PhysisDiskFlyAction : SSAction {
        private Vector3 start_vector;                              
        public float power;
        private PhysisDiskFlyAction() { }
        public static PhysisDiskFlyAction GetSSAction(int lor, float power) {
            PhysisDiskFlyAction action = CreateInstance<PhysisDiskFlyAction>();
            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.destroy = true;
                this.callback.SSActionEvent(this);
            }
        }
    
        public override void Start() {
            gameobject.GetComponent<Rigidbody>().AddForce(start_vector*3, ForceMode.Impulse);
        }
    }
    
  • FlyActionManager.cs

    在动作管理器中加上使用物理引擎的动作并重载DiskFly函数,当不使用物理引擎时启用isKinematic运动学变换,当使用物理引擎时关闭运动学变换:

    //飞碟飞行
    public void DiskFly(GameObject disk, float angle, float power) {
        disk.GetComponent<Rigidbody>().isKinematic = true;
        int lor = 1;
        if (disk.transform.position.x > 0) lor = -1;
        fly = DiskFlyAction.GetSSAction(lor, angle, power);
        this.RunAction(disk, fly, this);
    }
    
    public void DiskFly(GameObject disk, float power) {
        disk.GetComponent<Rigidbody>().isKinematic = false;
        int lor = 1;
        if (disk.transform.position.x > 0) lor = -1;
        fly_ph = PhysisDiskFlyAction.GetSSAction(lor, power);
        this.RunAction(disk, fly_ph, this);
    }
    
  • 最后给飞碟的预制体加上刚体组件即可,其他代码都不需要改动。

  • 在FirstController中可切换:

    action_manager.DiskFly(disk, angle, power);//运动学变换
    //action_manager.DiskFly(disk, power);//物理引擎
    

总结

本次作业主要是了解了物理引擎在Unity3D中的使用,包括FixedUpdate函数,刚体组件,对游戏对象速度和力的操作,使用物理引擎就不需要模拟运动学的位置变换,使用复杂的公式计算。总的来说过程比较顺利,没有太大的阻碍。

Unity3D项目七:简单打靶 简单打靶 文章目录简单打靶游戏规则与要求项目地址与演示视频具体实现总结参考资料 游戏规则与要求 游戏内容要求: 靶对象为 5 环,按环计分; 箭对象,射中后要插在靶上 增强要求:射中后,箭对象产生颤抖效果,到下一次射击 或 1秒以后 游戏仅一轮,无限 trials; 增强要求:添加一个风向和强度标志,提高难度 项目地址与演示视频 项目地址 -> 传送门???? 视频连... 阅读详情

相关推荐

Unity3d 打飞碟 物理运动版

Unity3d 打飞碟-物理运动版 github 传送 视频演示 题目要求 改进飞碟(Hit UFO)游戏: 按 adapter模式 设计图修改飞碟游戏; 使它同时支持物理运动与运动学(变换)运动。 Adapter 模式 运动学和动力学的物体运动存在区别。在 unity3d 中两种方式会产生不同的效果。使用 adapter 模式,使得游戏能支持两种方式的运动。 uml 图变化如下,增加...

ShiYiloo_的博客 541

Unity3D实现飞行模式#1

当双击空格键时,物体将进入飞行模式,刚体组件的重力使用将被关闭,并将物体移动到指定高度;按住 Shift 键时,将会下降;再次双机空格键时,物体将退出飞行模式。在 FixedUpdate 中检测是否需要落地,如果是则将重力重新启用,并将物体移动到地面高度。

雾削木的优快云博客 1479

Unity3D飞机操纵游戏源码(完整版)

Unity3D飞机操纵游戏源码(完整版)

unity中 使用贝塞尔曲线飞行

b. 创建四个空物体作为贝塞尔曲线的控制点,并将它们的 Transform 分别赋值给 point0, point1, point2, 和可选的 point3。我们编写一个脚本,将对象沿着贝塞尔曲线飞行。我们将允许用户设置起点、中间控制点和终点。a. 将这个脚本 BezierFly 附加到你希望沿曲线飞行的对象上。对上面BezierFly进行微改即可。

xzj183的博客 1343

unity 飞机类游戏控制代码

unity引擎飞机游戏开发使用代码。飞机常用的控制比如移动,上升,转弯,旋转等操作代码。

unity3d模拟飞机飞行源码

unity3d模拟飞机飞行源码Flight Simulation Engine,支持 iOS和 Android平台,非常逼真的飞机飞行模拟器,高度先进飞行动力学建模,含声音。

Unity 学习笔记 5.控制飞机飞行

unity 简单控制飞机飞行 移动旋转

weixin_60435181的博客 1813

Unity飞行模拟 Flight Simulation Enine

Unity飞行模拟 Flight Simulation Enine,超逼真模拟飞行体验

Unity模拟3D飞机驾驶(稳定版和灵活版)

1、效果呈现: b站视频链接: 注:视频中的实现均纯代码,无动画。 2、操作说明: 自动驾驶操作:AD控制左右旋转,WS控制升降,飞机自动往前行驶。此驾驶模式飞机更平稳,飞机自动回位。 手动驾驶操作:鼠标控制旋转升降,按住X飞机往前行驶。此驾驶模式飞机更灵活。 按Tap键切换驾驶模式。 3、效果实现: Game窗口分辨率:1920*1080。 Hierarchy面板设置,Player空物体挂PlayerControl脚本(源码在下面)和Rigidbody,在空物体下挂模型Model,以Mo

ysn11111的博客 6380

RBF(径向基神经网络)基础解析与代码实例:拟合任意函数

目前RBF这一强大工具已经被基本证实可以拟合任意函数! 在机器学习领域,神经网络是一种强大的工具,用于解决各种复杂问题。其中,径向基函数(RBF,Radial Basis Function)神经网络以其独特的结构和优异的性能,在非线性函数逼近、模式识别等领域表现尤为突出。RBF神经网络是一种前馈神经网络,其隐含层节点的激活函数采用径向基函数,具有更强的局部逼近能力和更快的收敛速度。

橙色小博的博客,励志在人工智能领域发光发热! 1604

【Unity3D】RTS Engine 笔记一

RTS Engine 中配置一个新场景, 初步认识GameManager、设置地形以及配置地形网格搜索

ViYeye的博客 1650

用Unity3D实现打飞碟游戏

用Unity3D实现打飞碟游戏 项目地址 打飞碟游戏 完成效果图 类图 要求 游戏规则 游戏有 n 个 round,每个 round 都包括10 次 trial。 每个 trial 的飞碟的色彩、大小、发射位置、速度、角度、同时出现的个数都可能不同。它们由该 round 的 ruler 控制。 每个 trial 的飞碟有随机性,总体难度随 round 上升。 鼠标点中得分,得分规则按色彩、大小、速度不同计算,规则可自由设定。 实现要求 使用带缓存的工厂模式管理不同飞碟的生产与回收,该工厂必须是场景

StuGeek的博客 2419

用示波器抓一次MIPI D-PHY的波形,手把手教你读懂HS模式和LP模式的切换时序

本文详细解析了MIPI D-PHY信号的双模切换机制,包括高速模式(HS)和低功耗模式(LP)的波形捕获与诊断技巧。通过示波器设置、关键状态分析和实战案例,帮助工程师快速定位信号完整性问题,提升调试效率。

weixin_30696427的博客 456

【Unity3d学习】使用物理引擎——打飞碟游戏的物理引擎改进与射箭游戏设计

写在前面 Unity3d学习制作的实验资料都在老师的课程网站上:传送门 本次实验的项目有两部分,打飞碟的物理引擎改进以及射箭游戏的设计在Github上:传送门 视频链接:打飞碟(与上一个项目的演示没什么太大区别)、射箭游戏 此次打飞碟游戏的改进是在上一次实验的基础上进行的(上一次的博客地址) HitUFO的物理引擎改进版本 回看内容要求: 游戏内容要求: 游戏有 n 个 round,每个 ...

JKJKL1的博客 866

RTX 5090配Ubuntu 24.04踩坑记:手把手搞定OpenVLA-OFT环境(附版本避坑清单)

本文详细记录了在RTX 5090显卡和Ubuntu 24.04系统上部署OpenVLA-OFT环境的完整过程,包括驱动安装、CUDA配置、PyTorch版本选择等关键步骤。提供了经过验证的版本组合清单和常见错误解决方案,帮助开发者高效搭建AI开发环境。

weixin_30342209的博客 465

STM32 Nucleo-144开发板开箱bring-up

最近做项目,用到STM32F446ZET6这款MCU,为了赶进度,前期软件需要提前开发,于是在某宝买了对应主控的官方开发板,为了避免遗忘,后面能翻出来回忆一些细节,就形成了本篇的主要内容,同时也希望能够帮助刚上手的小伙伴少走弯路,如果对你有帮助请点赞、收藏、转发,谢谢!

汽车电子软件领域知识分享 2677

unity3D-learning:增加了物理引擎运动模型的打飞碟小游戏

摘要:上周我们实现了用运动模型实现的打飞碟小游戏,具体就是给出设定好的路径,那么飞碟会沿着路径往设定的方向去走,我们只要咋过程中击打飞碟就能实现有效得分。这样的运动模型需要我们设定位置与路径等变量。如果采用物理模型,我们给他一个三维的力,根据F = M * a;那么一个物体将会以在力的作用下产生一定的运动轨迹并且随着力的作用运动,我们今天就是要实现这样的移动物理引擎模型。这边文章主要将两部分实现的...

tangyt77的博客 456

还在手敲LaTeX公式?用Rime小狼毫打造你的专属数学输入法(附完整配置包)

本文介绍如何利用Rime小狼毫输入法引擎打造专属数学公式输入方案,显著提升LaTeX公式输入效率。通过详细配置教程和智能补全技巧,帮助科研人员和学生实现3-5倍的输入速度提升,特别适合学术写作和技术文档创作场景。

weixin_32520601的博客 282

【Unity3D】Hit UFO飞碟游戏

由于飞碟有两种飞行模式,因此可以通过适配器模式,让两个动作管理者类都去实现一个接口,在RoundController中便可通过该接口实现对动作管理者类的沟通,这个接口一方面起到了多态的效果,另一方面也作为一个适配器,任何动作管理者类只要实现了该接口便可与RoundController类之间实现沟通。RoundController类负责从DiskFactory中获得飞碟,对飞碟对象的具体属性进行初始化后发送飞碟,并对回合进行更新。使用带缓存的工厂模式(对象池)管理不同飞碟的生产与回收,该工厂必须是单实例的。

dudu21311048的博客 277

机器视觉应用工程师职位深度解析与面试指南

广东奥普特科技招聘机器视觉应用工程师,要求大专以上理工科专业背景,熟悉C/C++或PLC编程,具备自动化设备调试经验。岗位职责包括视觉项目方案评估、系统安装调试、售后技术支持及异常处理,需接受外派出差。该职位面向专业对口的应届生或实习生,强调动手能力、沟通技巧和吃苦耐劳精神。机器视觉工程师需掌握图像处理算法、硬件配置等核心技术,在工业自动化领域具有良好发展前景。求职者应注重编程能力和实践经验的积累,以胜任这一技术密集型岗位。

郑伟强dev的专栏 431

【YOLOv12改进trick】高效多尺度卷积注意力EMCAD_Block模块引入YOLOv12,实现涨点和效率提升,含创新点Python代码

EMCAD引入YOLOv12模块,实现高效多尺度注意力模块引入到YOLOv12中的快速涨点及效率提升

向上生长的程序媛的博客 852

鼠标打飞碟(物理引擎)

3d游戏作业1

weixin_52801288的博客 456

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Unity3d作业(六):改进飞碟(Hit UFO)游戏

Unity3d作业(六) 本次作业的内容为:改进飞碟(Hit UFO)游戏 游戏内容要求: 1、按 adapter模式 设计图修改飞碟游戏 2、使它同时支持物理运动与运动学(变换)运动 1、按 adapter模式 设计图修改飞碟游戏 我们首先需要知道和了解Adapter模式: Adapter模式分为两种: 1.类适配器模式 2.委托适配器 我们这里更多使用的是类适配器模式。 适配器模式(Adapt...

hkiller1999的博客 360

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Unity实现打飞碟小游戏

Unity实现打飞碟小游戏 项目地址 演示视频 适配器模式概述 定义 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper),属于结构型模式。 为表述方便,定义: 需要被适配的类、接口、对象,简称 src(source) 最终需要的输出,简称 dst (destination,即Target) 适配器称之为 Adapter 。 一句话描述适配器模式的感觉: src->Adapter->d

m0_50547440的博客 1913

【Unity3D】改进飞碟(Hit UFO)游戏

附加作业 打靶游戏 改进飞碟(Hit UFO)游戏 上次作业,简单版 游戏内容要求 按 adapter模式 设计图修改飞碟游戏 使它同时支持物理运动与运动学(变换)运动 设计UML Adapter 模式 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 UML变化如下,增加了新的接口和方法,场景控制器通过接口调用该方法,而具体的不同的动作控制类将实现该接口,方便场控的调用。 实现 只重点说明这次新修改的部分代码。 在之前的基础上,增加.

Khynnn的博客 294

unity 3D 鼠标打飞碟(Hit UFO)

unity 3D 鼠标打飞碟。

m0_74969428的博客 1939
上一篇: Unity3D项目五:简单打飞碟
下一篇: Unity3D项目七:简单打靶
Tifinity
博客等级 码龄9年 18粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值