如何在 Unity 中启用碰撞时的粒子系统?
How do I enable a particle system on collision in Unity?
我正在制作一款地球被陨石撞击的游戏。我已经对撞击地球的陨石进行了编程,并且两种形状都有一个球体对撞机。我还设计了爆炸粒子。
但是,我不知道陨石撞击地球后如何触发爆炸。
这是我的代码:
地球自转脚本
using System.Collections.Generic;
using UnityEngine;
public class orbit : MonoBehaviour
{
public Transform world;
public float rotationSpeed=1f;
// Start is called before the first frame update
void Start()
{
world = GetComponent<Transform>();
Debug.Log("this works on the first frame");
}
// Update is called once per frame
void Update()
{
//code for rotating the earth
world.Rotate(new Vector3(0, rotationSpeed, 0), Space.World);
}
}
Earth object
为此,您必须在两个元素(地球和陨石)上添加刚体并激活“触发器”选项,但只能在其中一个上进行。 (例如地球)。
在您添加的脚本中添加一个新函数(地球自转的片段)。
添加一个新变量(带有粒子的预制件)。
在你的粒子系统上激活“Play on Awake”和“Stop action”来摧毁。
public GameObject explosionPrefab;
void OnCollisionEnter(Collision collision)
{
ContactPoint contact = collision.contacts[0];
Quaternion rot = Quaternion.FromToRotation(Vector3.up, contact.normal);
Vector3 pos = contact.point;
GameObject explosionParticle = Instantiate(explosionPrefab, pos, rot);
}
我正在制作一款地球被陨石撞击的游戏。我已经对撞击地球的陨石进行了编程,并且两种形状都有一个球体对撞机。我还设计了爆炸粒子。
但是,我不知道陨石撞击地球后如何触发爆炸。
这是我的代码:
地球自转脚本
using System.Collections.Generic;
using UnityEngine;
public class orbit : MonoBehaviour
{
public Transform world;
public float rotationSpeed=1f;
// Start is called before the first frame update
void Start()
{
world = GetComponent<Transform>();
Debug.Log("this works on the first frame");
}
// Update is called once per frame
void Update()
{
//code for rotating the earth
world.Rotate(new Vector3(0, rotationSpeed, 0), Space.World);
}
}
Earth object
为此,您必须在两个元素(地球和陨石)上添加刚体并激活“触发器”选项,但只能在其中一个上进行。 (例如地球)。
在您添加的脚本中添加一个新函数(地球自转的片段)。
添加一个新变量(带有粒子的预制件)。
在你的粒子系统上激活“Play on Awake”和“Stop action”来摧毁。
public GameObject explosionPrefab;
void OnCollisionEnter(Collision collision)
{
ContactPoint contact = collision.contacts[0];
Quaternion rot = Quaternion.FromToRotation(Vector3.up, contact.normal);
Vector3 pos = contact.point;
GameObject explosionParticle = Instantiate(explosionPrefab, pos, rot);
}