Unity C#,2D游戏在选定位置生成战利品
我目前正在联合制作2D游戏《太空射手》类游戏。 我的问题是战利品生成脚本。如果敌人快速繁殖,那么战利品将不会在被摧毁的敌人身上繁殖,而是在刚刚繁殖的敌人身上繁殖 用于所有我的探测和战利品生成的2个脚本:Unity C#,2D游戏在选定位置生成战利品,c#,unity3d,2d,instantiation,C#,Unity3d,2d,Instantiation,我目前正在联合制作2D游戏《太空射手》类游戏。 我的问题是战利品生成脚本。如果敌人快速繁殖,那么战利品将不会在被摧毁的敌人身上繁殖,而是在刚刚繁殖的敌人身上繁殖 用于所有我的探测和战利品生成的2个脚本: public void onDeath(bool isDead) { if (isDead == true) { if (Random.value <= dropProbability) { Instantiate(L
public void onDeath(bool isDead)
{
if (isDead == true)
{
if (Random.value <= dropProbability)
{
Instantiate(Loot.transform, Loot.transform.position = Enemy.transform.position, Quaternion.Euler(0, 180, 0));
}
}
}
public-void-ondath(bool-isDead)
{
如果(isDead==true)
{
如果(Random.valueBenjamin Danger Johnson您所说的是正确的,那么这是一个有一年历史的问题。
我相信你所说的其实是解决问题的办法。我早就解决了这个问题(现在看来,我觉得很奇怪我是如何与之抗争的,呵呵,但我想进步会让我们变得更好)
因为任何人都会有类似的问题。
不要使用FindObjectOfType
使用统一的
取而代之的是GetComponent:
本杰明·约翰逊你说的是对的,但这是一个有一年历史的问题。
我相信你所说的其实是解决问题的办法。我早就解决了这个问题(现在看来,我觉得很奇怪我是如何与之抗争的,呵呵,但我想进步会让我们变得更好)
因为任何人都会有类似的问题。
不要使用FindObjectOfType
使用统一的
取而代之的是GetComponent:
将生成战利品的位置传递给OnDath方法有什么问题吗?您可以调用OnDath(true,transform.position)
实例化(loot.transform,loot.transform.position=敌方.transform.position,四元数.Euler(0,180,0))Enemey在哪里定义?还有,onDeath(bool isDead)
你可能会认为,如果你调用一个名为OnDed的函数,那么在调用该函数时,敌人总是死的,但是你传递了一个布尔值,表示敌人是否真的死了。出于某种原因,我的坏消息是,当我复制并粘贴公共游戏对象战利品;公共游戏对象敌人;[Range(0f,1f)]时,它会剪切我的代码公共浮动下降概率=1f;公共bool isDead=false;
敌人只是一个游戏对象。因此,onDead只有在healthPoints达到0时才会触发。至于呼叫,因为每次被呼叫时,敌人都会死亡,所以它只会触发响应我认为你的主要问题来自FindObjectOfType,可能还有你的敌人object(或启动方法).FindObjectOfType是一个非常慢的函数,用于搜索整个场景中的第一个实例,任何实例,即Loot Spawn对象。您可能会意外创建一个实例,并使用此脚本而不是特定于现已死亡的敌人的脚本进行访问。敌人是另一个问题,主要是因为我不知道它的值来自何处OnEnter函数中的ROM。关于这个的更多信息将帮助我更好地追踪这个问题。一目了然,脚本似乎是在不同的固定间隔异步或可能运行的。您可能也想考虑使用协同程序,并且只需提供您需要的所有信息(掠夺产卵位置,掠夺预置)。在as参数中。将生成战利品的位置传递给onDeath
方法有什么错吗?您可以调用onDeath(true,transform.position)
实例化(loot.transform,loot.transform.position=敌方.transform.position,四元数.Euler(0,180,0))Enemey在哪里定义?还有,onDeath(bool isDead)
你可能会认为,如果你调用一个名为OnDed的函数,那么在调用该函数时,敌人总是死的,但是你传递了一个布尔值,表示敌人是否真的死了。出于某种原因,我的坏消息是,当我复制并粘贴公共游戏对象战利品;公共游戏对象敌人;[Range(0f,1f)]时,它会剪切我的代码公共浮动下降概率=1f;公共bool isDead=false;
敌人只是一个游戏对象。因此,onDead只有在healthPoints达到0时才会触发。至于呼叫,因为每次被呼叫时,敌人都会死亡,所以它只会触发响应我认为你的主要问题来自FindObjectOfType,可能还有你的敌人object(或启动方法).FindObjectOfType是一个非常慢的函数,用于搜索整个场景中的第一个实例,任何实例,即Loot Spawn对象。您可能会意外创建一个实例,并使用此脚本而不是特定于现已死亡的敌人的脚本进行访问。敌人是另一个问题,主要是因为我不知道它的值来自何处OnEnter函数中的ROM。关于这个的更多信息将帮助我更好地追踪这个问题。一目了然,脚本似乎是在不同的固定间隔异步或可能运行的。您可能也想考虑使用协同程序,并且只需提供您需要的所有信息(掠夺产卵位置,掠夺预置)。作为参数。
void Update()
{
if (healthPoints <= 0)
{
if (gameObject.CompareTag("Enemy"))
{
FindObjectOfType<LootSpawn>().onDeath(true);
Destroy(this.gameObject);
}
else
{
Destroy(this.gameObject);
}
}
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Ammo") != true)
{
if (other.gameObject.tag != this.gameObject.tag)
{
healthPoints--;
if (other.gameObject.CompareTag("Player1") == true)
{
FindObjectOfType<uiElements>().RemoveHealth();
}
}
}
}