C# (Galaga Style Project) - 基于层次结构限制 Projectile Prefab 克隆
Posted
技术标签:
【中文标题】C# (Galaga Style Project) - 基于层次结构限制 Projectile Prefab 克隆【英文标题】:C# (Galaga Style Project) - Limit Projectile Prefab Clones based on Hierarchy 【发布时间】:2021-12-30 10:21:42 【问题描述】:我正在尝试按照与原始规则集相同的规则来练习创建 Galaga 的克隆。我目前正试图限制任何时候可以在场景中出现的克隆预制件的数量,就像 Galaga 的射弹在任何时候都限制在屏幕上的 2 个一样。我想要让玩家可以发射最多两个射弹,它们会在 2 秒后或它们碰撞时摧毁(这部分正在运行),然后如果两个射弹克隆都无法射击在层次结构中处于活动状态且尚未销毁(不工作,因为我可以实例化超过 2 个限制的射弹)。
我已经通过 Google 梳理了大约 3 个小时,但没有任何解决方案对我有用,至少在我尝试实施它们的方式上。
非常感谢大家的帮助!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class playerController : MonoBehaviour
public float moveSpeed = 1.0f;
public playerProjectile projectile;
public Transform launchOffset;
public int maxBullets = 0;
private GameObject cloneProjectile;
public Rigidbody2D player;
// Start is called before the first frame update
void Start()
player = this.GetComponent<Rigidbody2D>();
// Update is called once per frame
void Update()
MovePlayer();
PlayerShoot();
public void MovePlayer()
player.velocity = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical")) * moveSpeed;
public void PlayerShoot()
if (Input.GetKeyDown(KeyCode.Z))
var cloneProjectile = Instantiate(projectile, launchOffset.position, launchOffset.rotation);
maxBullets++;
if (maxBullets >= 3)
Destroy(cloneProjectile, 0.1f);
maxBullets --;
return;
【问题讨论】:
我会使用对象池并使用大小为 2 的池。Unity 在这里写了一篇不错的教程learn.unity.com/tutorial/introduction-to-object-pooling。在 Unity 2021.1 及更高版本中,有一个内置的ObjectPool
(以及其他类似的类)可以提供帮助,但我不知道它是否能以您需要的方式处理您的最大问题。
【参考方案1】:
你可以稍微改变一下逻辑。只要游戏处于活动状态,playerController 类的实例就处于活动状态,因此它将知道并保留“maxBullets”的值,直到您死亡或退出程序。 因此,每次单击“z”时,您应该做的第一件事就是运行检查。如果当前的弹丸数量等于最大值,则让逻辑“返回”并退出该方法。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于C# (Galaga Style Project) - 基于层次结构限制 Projectile Prefab 克隆的主要内容,如果未能解决你的问题,请参考以下文章
nyoj 1239 引水project (河南省第八届acm程序设计大赛)
JetBrains宣布Project Rider:一款C#跨平台IDE
问题:Unity Project - Drone-Simulation:更改相机视角(C#)
JetBrains宣布Project Rider:一款C#跨平台IDE
C#:Release-Build-DLL 中的 Debug.Assert() 似乎由 Debug-Build-Project 激活