gpt4 book ai didi

c# - 由多个游戏对象组件组成的游戏对象的粒子系统行为不同

转载 作者:太空宇宙 更新时间:2023-11-03 15:24:23 26 4
gpt4 key购买 nike

我有一个 2D 游戏。我有一些游戏对象由带有对撞机的奇异形状制成,还有一些由多个形状制成并包含在我添加了角色对撞机的空游戏对象中。所有游戏对象都添加了粒子系统,单一形状的游戏对象按预期工作并在碰撞时爆炸,多形状的对象则不然。

当使用 Play On Awake 和 Looping 来测试它们时,爆炸会按预期工作,但它们不会在碰撞时爆炸。我尝试将粒子系统放在外部游戏对象内的其中一个形状上,然后它显示错误“缺少组件系统”,试图访问 x 对象的粒子系统,这是有道理的。

在每个游戏对象 C# 类中,我有以下方法:

private void OnCollisionEnter(Collision coll)
{
Explode();
}

private void Explode()
{
var exp = GetComponent<ParticleSystem>();
exp.Play();
GetComponent<Renderer>().enabled = false;
Destroy(gameObject, exp.duration);
}

炸弹的速率设置为 0,一次爆炸。

我已尝试搜索,但找不到在由多个 3D 游戏对象形状组成的游戏对象中使用粒子系统时所需的缺失信息。

我错过了什么?

最佳答案

我已经解决了,有一些问题是由于不了解该做什么和创建 hack 而造成的。

第一个问题是渲染器是在子对象中创建的,因此最好获取所有子对象并循环遍历它们,然后在每个子对象中禁用渲染器。

我还删除了角色碰撞器,因为这不是必需的并且使用了球体碰撞器。

然后我取消选中运动学,因为这已经启用以阻止我在空中的游戏对象被踢来踢去,而是我在刚体中添加了质量。

在 explode 方法中,我注释掉了删除渲染可见性,因为这会干扰爆炸:

private void Explode()
{
var exp = GetComponent<ParticleSystem>();
exp.Play();
//GetComponent<Renderer>().enabled = false;
Destroy(gameObject, exp.duration);
}

我还延长了粒子系统的启动生命周期以超过持续时间。确保对象被销毁时粒子可见。

我仍然需要调整爆炸,但这对我来说是一个巨大的打击。

关于c# - 由多个游戏对象组件组成的游戏对象的粒子系统行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35983437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com