《Lua游戏AI开发指南》一2.8 发射方块

简介:

本节书摘来异步社区《Lua游戏AI开发指南》一书中的第2章,第2.8节,作者: 【美】David Young(杨) 译者: 王磊 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.8 发射方块

现在我们有了基本的光照和一个物理平面,还能创建和模拟物理对象,是时候发射一些东西了。在开始创建智能体之前,先让我们快速了解一下沙箱对象的另外一些物理属性,以及如何与输入控制器进行交互。

Sandbox_HandleEvent函数让沙箱能够响应鼠标和键盘输入事件。事件参数是一个Lua表,存储了事件的生成来源、事件是由按下还是松开按钮产生的以及事件是哪个键产生的这类信息。鼠标移动事件也类似,但包含了鼠标指针的宽高位置。

我们已经知道如何创建一个沙箱对象了,要发射一个对象只需要把它放置在相机的位置,然后对它施加一个物理冲击。

现在我们打算在接收到空格键按下事件时创建并发射一个方块。相机的位置和朝向可以从沙箱中的Sandbox.GetCameraPositionSandox.GetCameraForward函数获取到。我们会把位置和朝向赋值给方块并对它沿相机面对的方向施加一个力。为了给物体添加一点自转,你可以使用Core.ApplyAngularImpulse函数来让它在飞向天空时开始自转。

Sandbox.lua:

   function Sandbox_HandleEvent(sandbox, event) 
       if (event.source == "keyboard" and
           event.pressed and event.key == "space_key" ) then

           local block = Sandbox.CreateObject( 
               sandbox,
               "models/nobiax_modular/modular_block.mesh");

           local cameraPosition = 
               Sandbox.GetCameraPosition(sandbox);
           -- Normalized forward camera vector. 
           local cameraForward =
               Sandbox.GetCameraForward(sandbox);
           -- Offset the block's position in front of the camera. 
           local blockPosition =
               cameraPosition + cameraForward * 2;
           local rotation = Sandbox.GetCameraOrientation(sandbox);

           -- Mass of the block in kilograms.
           Core.SetMass(block, 15);
           Core.SetRotation(block, rotation);
           Core.SetPosition(block, blockPosition);

           -- Applies instantaneous force for only one update tick. 
           Core.ApplyImpulse(
               block, Vector.new(cameraForward * 15000));

           -- Applies instantaneous angular force for one update
           -- tick.  In this case blocks will always spin forwards
           -- regardless where the camera is looking. 
           Core.ApplyAngularImpulse(
               block, Sandbox.GetCameraLeft(sandbox) * 10);
       end
   end

现在运行沙箱,我们就可以四处移动、转动相机和发射方块了,如图2-3所示。


2_3

相关文章
|
1月前
|
存储 人工智能 关系型数据库
拥抱Data+AI|解码Data+AI助力游戏日志智能分析
「拥抱Data+AI」系列第2篇:阿里云DMS+AnalyticDB助力游戏日志数据分析与预测
拥抱Data+AI|解码Data+AI助力游戏日志智能分析
|
1月前
|
人工智能 知识图谱
轻松搭建AI版“谁是卧底”游戏,muAgent框架让知识图谱秒变编排引擎,支持复杂推理+在线协同
蚂蚁集团推出muAgent,兼容现有市面各类Agent框架,同时可实现复杂推理、在线协同、人工交互、知识即用四大核心差异技术功能。
50 2
|
1月前
|
存储 人工智能 关系型数据库
拥抱Data+AI|玩家去哪儿了?解码Data+AI如何助力游戏日志智能分析
本文为阿里云瑶池数据库「拥抱Data+AI」系列连载第2篇,基于真实客户案例和最佳实践,探讨如何利用阿里云Data+AI解决方案应对游戏行业挑战,通过AI为游戏行业注入新的活力。文章详细介绍了日志数据的实时接入、高效查询、开源开放及AI场景落地,展示了完整的Data+AI解决方案及其实际应用效果。
|
3月前
|
机器学习/深度学习 人工智能 开发者
谷歌推世界首个AI游戏引擎,2000亿游戏产业恐颠覆!0代码生成游戏,老黄预言成真
【9月更文挑战第22天】谷歌近日推出的AI游戏引擎GameNGen,作为全球首款神经模型驱动的游戏引擎,引发了广泛关注。该引擎使用户无需编写代码即可生成游戏,并实现了与复杂环境的实时交互,显著提升了模拟质量。在单TPU上,GameNGen能以超20帧/秒的速度流畅模拟经典游戏《DOOM》。这项技术不仅简化了游戏开发流程,降低了成本,还为游戏设计带来了更多可能性。然而,它也可能改变游戏产业的商业模式和创意多样性。无论如何,GameNGen标志着游戏开发领域的一次重大革新。
62 2
|
5月前
|
人工智能 搜索推荐 开发者
AI驱动的游戏设计:创造更智能、更沉浸的游戏体验
【7月更文第31天】人工智能(AI)技术正在深刻地改变游戏行业,不仅为游戏设计师提供了创造更丰富、更动态游戏世界的工具,也为玩家带来了更加个性化和沉浸式的体验。本文将探讨AI在游戏设计中的应用案例,并展示一些具体的实现方法。
706 2
|
6月前
|
人工智能 图形学
【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏2(附项目源码)
【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏2(附项目源码)
93 1
【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏2(附项目源码)
|
5月前
|
人工智能 搜索推荐
影视与游戏行业AI视频制作实战:第二步,为角色生成个性化语音
每个角色有自己的性格、形象,那也一定需要自己个性化的声音。
|
6月前
|
人工智能 图形学
【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏1(附项目源码)
【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏1(附项目源码)
89 2
|
5月前
|
人工智能 编解码 数据可视化
影视与游戏行业AI视频制作实战:第一步,角色形象设计的一致性
随着生成式人工智能技术的发展和应用,影视与游戏行业也迎来了AI化的时代。
|
6月前
|
机器学习/深度学习 传感器 人工智能
敢不敢和AI比猜拳?能赢算我输----基于手势识别的AI猜拳游戏【含python源码+PyqtUI界面+原理详解】-python手势识别 深度学习实战项目
敢不敢和AI比猜拳?能赢算我输----基于手势识别的AI猜拳游戏【含python源码+PyqtUI界面+原理详解】-python手势识别 深度学习实战项目