前网易架构师-高司机
2014年优快云博客之星TOP10;资深游戏服务器架构师;曾在IBM的Platform Computing,淘米网,网易搬砖;开发团队上线了多个国内外爆款游戏+人工智能相关的边缘计算软硬件产品;欢迎+V gao_ke104 探讨咨询服务器架构设计,游戏运营,人工智能等领域的问题。
展开
-
Unity中RTS游戏的设计模式处理: 游戏中的对象选择和命令委托的基本框架
单个集中类(例如,)跟踪当前选择的单元/对象,并处理用于选择游戏中对象的任何光线投射逻辑。可选对象附加了一个组件,其中公开了一个公共函数,该函数返回一个实现该接口的类。类实现特定于控制单个单元的自定义逻辑。这是通过一个公共函数完成的,每次玩家单击一个新对象时都会调用该函数。当玩家单击屏幕时,单个类会进行光线投射,以获取有关单击哪个对象的信息。该类还跟踪当前正在控制的单元,并将新单击的对象提供给该单元的控制逻辑。如果没有选择任何内容,我们将尝试选择接下来单击的对象。原创 2024-11-06 10:17:23 · 12283 阅读 · 0 评论 -
Unity射击游戏开发教程:(37)给BOSS加个护盾,射击和移动
介绍在创建 Boss 战时,我想将其分为 3 个部分:护盾、射击和移动。护盾的目的是保护 Boss 免受任何伤害,直到玩家摧毁其周围移动的所有护盾发生器。原创 2024-10-09 11:09:23 · 910 阅读 · 0 评论 -
Unity射击游戏开发教程:(36)敌人关卡生成器的设计和开发
枚举是一个变量,它是一组常量。例如,我们可以使用整数来表示指南针的基本方向。0=北1=东2=南3=西这可能很难记住哪个整数代表哪个方向,并且也可能使阅读代码变得有点困难。枚举 Direction 保存表示罗盘方向的特定值子集我们可以声明一个枚举 Direction 并沿我们的基本方向传递:北、东、南、西。所以现在当我们使用枚举 North 时,它实际上表示 0 或 East 表示 1,并且每次我们都会将常量增加 1。但是,我们还没有完成枚举的设置。现在我们需要创建一个枚举类型的变量。原创 2024-09-18 14:31:49 · 1173 阅读 · 0 评论 -
Unity射击游戏开发教程:(35)轰炸敌人
声明变量对于这个动作,我决定尝试一些不同的东西,并使用协程来控制敌人何时改变方向。我们将使用布尔值来记录何时应该向左或向右移动。在update中,我们使用 if else 语句来检查左移布尔值是 true 还是 false。如果为 true,将使用 Vector3.left 将敌人平移向左移动,如果 bool 为 false,我们将使用 Vector3.right。在每个语句中,我们启动一个协程,将 bool 值切换为 true 或 false。协程。原创 2024-09-12 13:50:47 · 1552 阅读 · 0 评论 -
Unity射击游戏开发教程:(34)增加磁铁效果
在这一个小片段中,我们将介绍如何创建一个 Power Up(提升能量地道具),让玩家能够在不移动的情况下吸引其他 Power Up。获取播放器组件每个 Power Up 都有相同的 Power Up 脚本来控制其直线向下移动和碰撞触发。由于每个Power Up都有这个脚本,我们将在这个脚本中控制磁力运动。因此,我们需要掌握播放器,以便我们可以访问其位置和磁铁能量条。在update中,我们需要创建三个始终需要update的变量。第一个是 Vector2,它将保持 Power Up 的位置。原创 2024-09-10 10:54:55 · 1042 阅读 · 0 评论 -
Unity射击游戏开发教程:(34)让敌人有跟随和瞄准地侵略性
一旦满足该条件,我们将实例化激光预制件,将位置设置为火点的位置,并将旋转设置为火点的旋转。请记住,我们计算了卡农的旋转,并且火点是卡农的子级,因此火点的位置和旋转将与卡农的相同。中创建一个名为 Direction 的局部变量,并从玩家的位置中减去敌人的位置(请记住,设定是敌人的子级,因此它将与敌人具有相同的位置)。让我们为这个敌人创建一个脚本,我们需要获取佳能和火点的句柄,因此我们将声明一个游戏对象,序列化它们,并在检查器中分配这些游戏对象。现在,我们的卡农能够随着玩家的移动而向玩家的方向旋转。原创 2024-09-09 09:30:06 · 937 阅读 · 0 评论 -
Unity射击游戏开发教程:(33)控制飞机左右移动
在此方法中,我们有一个名为horizontalInput 的变量,它使用左移或右移的Input.GetAxis(水平)返回-1 到1 之间的值。当不向左或向右移动时,该值为 0,当向左移动时,该值增加到 -1,向右移动时,该值增加到 1。这很重要,因为如果该值小于 0,并且移动,我们就知道玩家是否向左移动如果大于 0,则正确。在我使用的动画中,它们只有两帧,因为我们希望飞机倾斜得很快,这样玩家在按下相应按钮时就能直接感觉到转弯。在本文中,我将介绍如何在玩家朝该方向移动时添加向左和向右转动的动画。原创 2024-08-29 10:15:13 · 941 阅读 · 0 评论 -
Unity射击游戏开发教程:(32)控制子弹射速
显示发射速度从较慢到较快的变化这是一篇关于如何实现射速以防止玩家乱按射击按钮的快速文章。通常做法说到要控制子弹的射速,可以通过以下几种方法:通过设置子弹的发射间隔时间来控制射速。在每次子弹发射后,设置一个时间延迟,确保下一枚子弹不能立即发射。利用计时器来控制发射间隔。可以使用定时器来设置一个固定的时间间隔,在每个时间间隔内发射一枚子弹。根据需求设定射速等级。根据游戏的难度或其他因素,可以设置不同的射速等级,每个等级对应不同的发射间隔时间。根据游戏中的事件触发子弹的发射。原创 2024-08-26 10:37:50 · 999 阅读 · 0 评论 -
Unity射击游戏开发教程:(31)制造一定追踪行为的敌人
如果为 FALSE,则敌人只能躲避,如果为 TRUE,则敌人只能射击。在本文中,我们将介绍如何在两种敌人行为之间切换。当我们使用 Dodging 方法时,我们将启动一个协程 (StartFiring),它将等待一段时间,然后将 _isFiring 设置为 TRUE。这两个方法会来回反弹,因为这些协程将 _isFiring 变量设置为 ON 和 OFF(TRUE 和 FALSE)。我们需要追踪敌人是否在开火,因为此时我们想要剥夺敌人的闪避能力。这将是一个布尔值,我们将其设置为 FALSE。原创 2024-08-06 10:28:13 · 1246 阅读 · 0 评论 -
Unity射击游戏开发教程:(29)躲避敌人的子弹射击
我们检查激光是否与带有“ShotDetection”标签的游戏对象发生碰撞,如果是,我们需要通过创建局部变量并使用 other.GetComponentInParent 来获取 Enemy4 的句柄,因为 Dodge 方法位于脚本中附加到 Enemy 对象而不是子对象。请记住,_isDodging 仅在 0.3 秒内为 true,然后将其设置为 false,从而阻止敌人的移动。在此协程中,我们将 _isDodging 设置为 true,持续 0.3 秒,然后再将其设置为 false,因为……原创 2024-07-04 14:06:32 · 1296 阅读 · 2 评论 -
Unity射击游戏开发教程:(30)如何让玩家追踪敌人
因此,我们使用 _direction 全局变量,该变量总是在更新中重新计算,并将其乘以我们的激光速度变量,该变量只是在 OnStart 之前声明的浮点变量。这是我们将使用rotationZ变量的地方,该变量在该变量上方的行中的每一帧中不断地重新计算。我们希望激光的旋转与敌人当前的旋转相匹配,因为我们已经在计算这一点,所以我们只需要告诉敌人最后使用我们之前使用的四元数欧拉进行旋转。现在我们有了玩家的位置,我们可以找出我们需要面对的方向,我们希望它出现在我们的更新中,因为玩家的位置会不断变化。原创 2024-06-26 17:35:52 · 1046 阅读 · 0 评论 -
Unity射击游戏开发教程:(27)创建带有百分比的状态栏
现在,我们需要一些变量到两个将是需要具有序列化字段属性的 UI,因此我们可以在检查器中分配它们,它们将是一个图像(将是我们的填充图像)和一个文本(这将是我们的弹药)计数文本。需要一个带有 int 参数的公共方法,该参数将作为使用的数量,因此当我们射击或使用推进器时,我们可以从玩家脚本中调用它。我们可以使用状态栏,但我们需要重新填充它,这对于弹药栏和推进器栏来说是不同的,因为推进器栏是再生的。跳转到玩家脚本,因为我们将从那里调用此方法,所以我们需要获取弹药栏的句柄,以便我们可以访问我们创建的方法。原创 2024-06-12 10:25:30 · 1493 阅读 · 0 评论 -
Unity射击游戏开发教程:(28)敌人被摧毁时掉落的能量提升
然后,我们将通过从生成管理器获取电源数组来实例化电源,并传入随机数,该随机数将确定将创建哪个电源,并在敌人被摧毁的位置创建它,并保持旋转相同使用四元数并将其设置为其身份。例如,百分比机会中的元素 0 = 通电数组中的元素 0(元素 1 = 元素 1,元素 2 = 元素 2,等等)。在 OnTriggerEnter 中,这是敌人被射弹或玩家击中的地方,我们希望在敌人被摧毁之前抓住敌人的当前位置,并将其分配给我们的 powerUpSpawnPosition,这样就知道在哪里可以产生能量我们实例化它。原创 2024-05-28 15:56:59 · 1086 阅读 · 0 评论 -
Unity射击游戏开发教程:(26)创建绕圈跑的效果
角度是我们每帧增加的角度,三角形的斜边(圆的半径)是我们的轨道距离,所以蓝线显示了当前 X 位置添加的内容。当敌人的 Y 位置移动超过停止点(即 2)且 _isMovingDown 为 true 时,我们会将当前的 X 和 Y 坐标存储在相应的变量中,并将 _isMovingDown 设置为 false,这样我们就不再向下移动,这些 X 和 Y 坐标为最终确定。我们创建了一个本地浮点值,它将包含更新时的新 X 位置,并将其设置为等于敌人停止时的 X 位置加上当前角度的 COS x 轨道距离。原创 2024-05-26 00:30:00 · 1005 阅读 · 0 评论 -
Unity射击游戏开发教程:(25)创建具有视差效果的滚动背景
我发现了一些很棒的像素背景,它们是为滚动背景和两者的视差而制作的,因此我能够混合和匹配来制作我的背景。在游戏更新中,我们检查背景图像的位置是否低于该偏移量(背景图像耗尽之前的位置),当低于该偏移量时,我们将其重新定位回起始位置,从而创建无限循环。我们需要找到背景的 Y 位置,即背景耗尽的位置,因此我们抓取父背景图像并将其在 Y 轴上移动,直到背景即将耗尽并记下 Y 位置。我们将创建一个脚本,将背景图像向下移动,然后当它到达 Y 位置时,我们将重新定位回原始位置,以创建这个无尽的滚动背景。原创 2024-05-25 00:15:00 · 1032 阅读 · 0 评论 -
Unity射击游戏开发教程:(24)创造不同的敌人
在这篇文章中,我们将讨论添加一个可以承受多次攻击的新敌人和一些动画来使事情变得栩栩如生。敌人没有任何移动或射击行为。这将有助于增强未来敌人的力量。我们将声明一个 int 来存储敌人可以承受的攻击数量,并将其设置为 3。首先,我们将跳转到 Enemy 脚本并使用 OnTriggerEnter2D 来检测物体何时与 Enemy 发生碰撞。如果标签是激光,我们将在 0.2 秒后摧毁激光,以便在摧毁激光之前给激光击中动画足够的时间播放。接下来,我们将命中计数减 1 并播放敌人命中动画。原创 2024-05-24 00:15:00 · 1024 阅读 · 0 评论 -
Unity射击游戏开发教程:(23)Unity 中的跟踪导弹
在我们的游戏更新中,我们需要找到敌人的游戏对象,因此我们可以将其存储在目标变量中。现在我们已经知道了导弹到达敌人的方向,我们希望能够旋转它,使其面向目标。这需要的是当前的 Vector3,它将是transform.up(精灵的顶部),目标 Vector3(存储在我们的方向上,以及希望它在每帧之间移动的距离。如果发生碰撞时标签是“导弹”,我们就知道这是我们的导弹,我们可以输入所有摧毁敌人和导弹的代码。此时,我们有一枚正在工作的跟踪导弹,导弹将向目标旋转并同时向目标移动,但当它击中敌人时,什么也没有发生。原创 2024-05-23 00:15:00 · 1069 阅读 · 0 评论 -
Unity射击游戏开发教程:(22)快速火力提升
一旦玩家开火,我们将开火速率设置为 Time.time 的当前时间加上开火速率,这样它现在必须等待足够的时间才能再次开火。例如,如果玩家在 1 秒开火,则新的开火时间将为 1 + 开火速率,即 0.5。但是,当 Power Up 脚本调用 Rapid Fire Active 方法时,它将将该 bool 设置为 TRUE 并启动等待秒数为 5 秒的协程,这是在 bool 之前玩家可以使用连射的持续时间设置回 FALSE,这会禁用该功能,直到再次收集为止。原创 2024-05-22 00:15:00 · 985 阅读 · 0 评论 -
Unity射击游戏开发教程:(21)健康生命值增加控制
在 Player 脚本中,添加“Increase Health”方法(将其公开,以便我们可以在 Power Up 脚本中调用它),这将处理生命的变化、更新引擎损坏和 UI 管理器。使用 IF ELSE 语句,如果生命值小于最大值 3,我们会将生命值增加 1,其他情况(如果生命值超过 3)我们会将生命值设置回 3,这样就不会超过最大数量。如果我们将 2 条生命移至 3 条生命,我们将关闭左侧引擎的损坏,如果生命从 1 条生命移至 2 条,我们将关闭右侧引擎的损坏。这使伤害动画与生命保持一致。原创 2024-05-21 00:15:00 · 1029 阅读 · 0 评论 -
Unity射击游戏开发教程:(20)增加护盾强度
如果它是 2,我们访问 Sprite Render 并将颜色更改为洋红色,如果它是 1,我们将其更改为红色,如果它小于或等于 0,我们关闭 Visualizer 和 Shield Active。因此,如果 ShieldActive 不等于 true,我们会将其设置为 true,设置盾牌强度(决定盾牌可以承受的攻击次数),激活盾牌可视化器并设置盾牌可视化器的颜色。护盾展示器的颜色已经是青色,但由于我们会在受到攻击时更改颜色,因此我们不希望默认为最后一个颜色,因此每次激活时都需要重置。原创 2024-05-20 09:53:58 · 971 阅读 · 0 评论 -
Unity射击游戏开发教程:(19)控制生命进度条
我们不希望当前的健康状况超过最大健康状况,因此我们使用 If Then 来检查此情况,如果发生这种情况,我们会将当前值设置为最大值。在此游戏对象中,我们将添加到 UI 图像中,这些图像将作为生命值栏的填充和轮廓。回到检查器,我们将脚本附加到健康栏,将填充图像分配给填充变量并将最大值设置为我们想要的值。我们需要初始化的变量是两个整数,分别是生命值“条”的最大值和玩家生命值的当前值。对于每个UI图像,我们只需将之前上传的精灵图像拖到填充图像中,因为它是白色的,所以我们可以将颜色更改为我们想要的任何颜色。原创 2024-05-17 14:01:55 · 980 阅读 · 0 评论 -
Unity射击游戏开发教程:(18)添加弹药计数+补充弹药
添加简单的弹药计数我将讨论如何向游戏中添加简单的弹药计数。这将包括在 HUD 中添加弹药计数器,当弹药达到 0 时,文本会将颜色更改为红色以提醒玩家。另外,当弹药数为0时,玩家将无法再射击。让我们深入了解吧!在播放器脚本中我们需要添加一些变量。我们将创建两个公共整数,一个是最大弹药,另一个是当前弹药。下一个变量将是一个布尔值,并将跟踪玩家是否有弹药。这将在一开始就设置为 true。在开始时,我们只想确保当前弹药与最大弹药相同。原创 2024-05-16 00:15:00 · 11515 阅读 · 0 评论 -
Unity射击游戏开发教程:(17)添加推进器推进和推进器推进动画
在当前状态下,当玩家清空 ThrusterBar 时,即使 ThrusterBar 已重新生成,他们也无法再使用 Thruster,因此我需要在 RegenThrusters 协程中添加 ActivateThruster 方法。在 UseThruster 方法中,我们之前使用了 RegenThruster 协程,当调用 UseThruster 方法时,我们需要执行检查以查看 RegenThruster 协程是否正在运行,如果是,我们将停止 RegenThruster 协程,然后再次调用它。原创 2024-05-15 00:15:00 · 909 阅读 · 0 评论 -
Unity射击游戏开发教程:(15)添加推进器推进和推进器推进动画
现在,当我按住左 Shift 键时,玩家移动得更快,当我释放左 Shift 键时,它会恢复到原始速度。如果 Thrusters(参数)为真,它将从小型推进器转到推进器,如果为假,它将从推进器转换回小型推进器。回到 IF ELSE 状态,如果左 Shift 键按下,我们将提高速度,我们将动画器布尔值设置为 true,以便它触发大推进器动画,当释放左 Shift 键时,布尔值设置为 false 返回动画回到小推进器。当玩家按住 Shift 按钮时,速度会加快,松开 Shift 按钮时,速度会恢复到原来的速度。原创 2024-05-14 00:15:00 · 907 阅读 · 0 评论 -
Unity射击游戏开发教程:(14)Unity 中的相机抖动
我们首先要确保相机支架与相机具有相同的位置,因此我们将其设为相机的子级并重置变换。相机支架将保持相机的原始位置,并且相机将在支架位置的背景下晃动。这使它保持相对于相机支架的位置,相机支架不移动,因此我们不会得到之前只有相机时所做的捕捉。现在,它是通常的transform.position,但将是transform.localPosition,它将获取游戏对象(相机)相对于父对象的位置。进入代码的核心部分,我们将使用 While 循环,并且循环将在经过的时间小于使用参数确定的摇动持续时间时运行。原创 2024-05-13 10:27:42 · 1752 阅读 · 0 评论 -
Unity射击游戏开发教程:(13)如何在Unity中播放音效
我们需要获取 AudioSource 的句柄,在 On Start 中我们将获取 AudioSource 并将其分配给我们的变量。为了获得最佳实践,我们将完成 NULL 检查以确保我们获取了 AudioSource 组件,如果我们确实拥有它,我们可以将激光声音剪辑(我们已经在检查器中分配)分配给音频源,以便它能够播放。当我们发射激光时,激光音频剪辑需要播放,因此在此方法中我们将使用 AudioSource.Play() 添加它。当我们在播放器脚本的检查器中触发时,我们将分配我们想要播放的音频剪辑。原创 2024-05-11 15:00:14 · 2027 阅读 · 0 评论 -
Unity射击游戏开发教程:(12)使用后处理
例如,您可能有一个村庄,有水域,因此当相机在陆地上时您将有一个滤镜,而另一个在水中时您将有一个滤镜。此外,我们需要创建一个配置文件,并且可以通过选择“新建”轻松完成此操作,它将创建一个配置文件。现在,我们将向场景添加一个游戏对象,该对象将充当图层,并应用后处理图层。接下来,我们需要创建一个新层(“后处理”)并将其添加到我们的后处理体积中,这是我们将其附加到相机时所需要的。在后处理层中,我们将添加主摄像机并选择我们在后处理体积上创建的后处理层。让我们将后处理体积添加到相机,为此,我们将添加后处理层到相机。原创 2024-05-08 00:15:00 · 1711 阅读 · 0 评论 -
Unity射击游戏开发教程:(11)制造敌人爆炸
在这种方法中,我们将使用游戏对象添加动画。这意味着,一旦敌人被实例化,敌人爆炸动画就会运行,尽管爆炸很棒,但我们希望能够控制它们何时发生。为了防止动画自动运行,我们需要创建一个空状态,因此当它开始时,它基本上转变为空,从那里我们可以控制到爆炸动画的转变。一旦我们为一个引擎创建了动画,我们就可以将动画器组件添加到另一个引擎,并将新创建的引擎故障动画拖到动画器中。然后,在 Void Start 上,我们可以获得动画组件,并且不需要找到它,因为我们已经位于 Enemy GameObject 上。原创 2024-05-07 00:15:00 · 1688 阅读 · 0 评论 -
Unity射击游戏开发教程:(10)创建主界面
我们需要将 Main_Menu 场景添加到我们的构建中。在“构建设置”中,单击“添加打开场景”来添加它,我们必须重新排列它,因此 Main_Menu 是场景 0,游戏场景是 1。在此 GameOverSequence 方法中,我们可以添加重新启动级别功能,但这确实超出了 UI 管理器的目的,因此我们需要创建一个新的 GameObject 来处理游戏的状态。现在我们已将场景添加到构建中,当按下重新启动键的 IF 语句且 isGameOver 为 true 时,我们可以加载场景并传入要加载的场景编号。原创 2024-05-06 10:17:01 · 1939 阅读 · 0 评论 -
Unity射击游戏开发教程:(9)创建游戏结束显示
我们的生命显示图像现在将显示玩家当前的生命数量,当玩家生命耗尽时,我们希望通过闪烁大写字母“GAME OVER”(游戏结束)让他们知道。现在,我们需要将三个生命的精灵图像拖入Element 3,将两个生命拖入Element 2,将一个生命拖入Element 1,将没有生命的精灵图像拖入元素 0。当玩家死亡,该图像将会更新。最后,我们在 Update Lives 方法中添加一个 IF 语句来检查玩家何时拥有 0 条生命,当达到 0 条生命时,我们可以调用一个协程来循环打开和关闭 GAME OVER 文本。原创 2024-05-01 00:15:00 · 1922 阅读 · 0 评论 -
Unity射击游戏开发教程:(8)构建 UI 元素:添加分数显示
当我们添加分数时,我们需要让 UI 知道。最后,我们需要 Player 脚本和 UIManager 脚本在添加分数时进行对话,因此在 UIManager 脚本中我们将创建一个带有 int 参数的公共 UpdateScore 方法。当选择文本元素时,可以看到当它在画布上重新定位时,它在游戏屏幕中的重新定位方式也是类似的。UI 适用于所有类型的游戏和应用程序,在此示例中,我们将为我的太空射击游戏设置一个简单的记分板。在优化过程中,我们将创建一个对玩家组件的玩家引用,并在开始时为每个敌人实例进行分配。原创 2024-04-30 09:36:57 · 2435 阅读 · 2 评论 -
Unity射击游戏开发教程:(7)Powerup的使用
目前,脚本设置为等待 5 秒,然后将 _isTripleShotActive 设置回 false,这将在 CONDITIONAL 中触发 ELSE 语句,其中正在实例化单个 _laserPrefab 而不是 _tripleShotPrefab。三重射击 PowerUp 的 5 秒似乎是正确的,但随着游戏的不断发展,需要不断进行游戏测试,以确保 PowerUp 的使用寿命仍然合适。我可以为每个 PowerUp 创建一个脚本,但这将是多余的,因为所有 PowerUp 的行为都是相同的。原创 2024-04-25 09:47:26 · 1641 阅读 · 0 评论 -
Unity射击游戏开发教程:(6)在 Unity 中插入动画
看到游戏立即从使用原始形状转变为准备发布游戏精灵是很奇怪的。但是,我在我的游戏中已经成功实现了游戏机制,因此我需要做的就是将原型转变为艺术品,用精灵资源替换原始形状。原始形状是 3D,精灵是 2D,因此我必须进行一些修改才能实现转换。我需要添加 2D 物体并从所有游戏对象中删除 3D 物体,这样它们才能正常工作。通过此更改,我还需要更新脚本上的碰撞,因为他们现在正在寻找 2D 碰撞器,而不是 3D。经过这几个改动,游戏已经从原型转变为成品游戏。原创 2024-04-24 00:15:00 · 900 阅读 · 0 评论 -
Unity射击游戏开发教程:(5)使用 GetComponent 在 Unity 中进行脚本通信
这将授予 Enemy 脚本访问 Player 脚本及其可能具有的任何公共方法的权限。当发生这种碰撞时,玩家需要失去生命,但此方法位于玩家脚本中,而不是敌人脚本中。因此,Enemy 脚本需要让 Player 脚本知道何时发生碰撞,以使用 PlayerDamage 方法。在这个游戏场景中,我有两个游戏对象,它们都有自己的脚本,需要进行通信。现在我们可以在 Enemy 脚本上调用 PlayerDamage 方法,因此每次两者之间发生碰撞时都会夺走一条生命,直到 Player 耗尽生命并被摧毁(null)。原创 2024-04-24 00:15:00 · 1735 阅读 · 0 评论 -
Unity射击游戏开发教程:(4)OnCollisionEnter 与 OnCollisionEnter 的比较
OnCollisionEnter方法要求碰撞的发起方必须拥有刚体,而被碰撞方有没有刚体并不重要,OnTriggerEnter方法则对此没有要求,只需要碰撞双方有一个具有刚体即可触发,当有物体勾选isTrigger属性时,则会执行OnTriggerEnter方法。在游戏里面使用物理引擎是很费性能的,我们尽量避免大量使用,或者仅使用运动学属性的碰撞,例如这个时候主角会被墙挡住行走,但是没有运动效果,亦或完全弃用物理引擎自己来实现碰撞,这种方式更灵活,但难度也最大。原创 2024-04-23 00:15:00 · 17588 阅读 · 0 评论 -
Unity射击游戏开发教程:(3)如何销毁游戏对象 ,添加CD
我们曾经创造的东西,现在却被我们摧毁了。例如,如果我们在游戏中开火 2 秒,Time.time 将为 2 + .5(我们的 fireRate),使得我们的 _fireTime = 2.5。创建所有这些激光预制件后,最终会减慢游戏速度,因此我们必须通过创建激光预制件来找到平衡,在屏幕上移动直到它超出游戏视图,然后销毁它。之后,激光就是它自己的游戏对象,具有自己的行为,因此在创建激光后需要一个脚本来处理激光。在我之前的文章中,我写了关于实例化或创建激光预制体,当发射时,激光预制件将继续在屏幕上移动一段时间。原创 2024-04-22 11:22:57 · 17322 阅读 · 1 评论 -
Unity射击游戏开发教程:(2)实例化和销毁游戏对象
将激光器的预制件拖到场景上,然后将脚本拖到其上,然后选择激光器,在检查器面板的右上角,你将看到一个名为“覆盖”的选项。如果我们想实例化一个对象,我们只需要输入 Instantiate 和 (_laser_prefab) 即可将其显示在屏幕上,但由于我们希望玩家按空格键来执行此操作,因此我们需要检查我们的输入空间钥匙。后边我们将给我们的发射器一个cd“冷却”期,因为我们不希望我们的玩家滥用我们的激光炮并控制他们实际可以发射的次数。好的,现在我们的项目中已经有了一个安全的激光预制件,请继续删除屏幕上的预制件。原创 2024-04-21 00:15:00 · 1080 阅读 · 0 评论 -
Unity射击游戏开发教程:(1)玩家控制
玩家控制和移动是视频游戏中最酷的事情之一,因为你正在控制游戏中的某些东西现在游戏中的玩家是我们的蓝色方块英雄。我在游戏开发中了解到,游戏是用简单的对象制作原型,然后添加所有漂亮的艺术和声音。代码…我们要做的第一件事是在游戏开始时为玩家提供一个起始位置,因此我们需要获取立方体的当前位置并为其指定一个新的 Vector3 (x, y, z) 0, 0, 0。这就是乐趣的开始。我们创建了一个新方法,它将获取水平轴和垂直轴上的输入。原创 2024-04-20 00:30:00 · 992 阅读 · 0 评论 -
Unity常见插件汇总
Unity插件的功能强大且易于使用,可以提高开发效率和游戏质量,同时也提供了丰富的资源和支持。这些因素让开发者对使用Unity插件产生了浓厚的兴趣。因此对于Unity3D开发程序员来说,插件就是非常好用的利器。我之前不断地总结和整理,今天将做一个违背祖宗的决定:将将近60多个功能强大的插件介绍给大家uMMORPG插件,是一款==RPG==游戏项目模板,里面有很多的资源,包含玩家、怪物、NPC、坐骑、宠物、战斗、商城、联网等等,可以作为研究学习,或者开发模块。原创 2024-04-21 00:15:00 · 17920 阅读 · 1 评论 -
探索Unity中的事件驱动:ScriptableObjects 与 UnityEvents
在许多情况下,可能会发现这两种方法的组合是有益的,使用 UnityEvents 进行简单的组件内通信,使用 ScriptableObjects 进行更复杂的组件间交互。现在,每当玩家收集硬币或他们的生命值发生变化时,就会触发相应的事件,并且任何监听这些事件的组件都会做出相应的响应。对于解耦、灵活性和可重用性很重要的更复杂的系统(例如为更大的项目实现强大的事件系统),ScriptableObjects 可能是更好的选择。让我们定义两个事件:一个是玩家收集硬币时的事件,另一个是玩家的生命值发生变化时的事件。原创 2024-04-19 16:01:00 · 910 阅读 · 0 评论