包含此页的版本:
不含此页的版本:
首先,请指定哪个碰撞体(Colliders)一种不可见的形状,用于处理对象的物理碰撞。碰撞体不需要与对象的网格体形状完全相同 - 在游戏中,粗略的近似值通常更有效且难以区分。更多信息
请参阅术语表在场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,您可以放置环境、障碍物和装饰,实质上是分块设计和构建游戏。更多信息
请参阅术语表粒子可以与之交互。为此,请将一个或多个碰撞体分配给 碰撞体(Colliders) 列表属性。要增加列表中的碰撞体数量,请点击碰撞体列表下方的 添加(Add) (+) 按钮。要从列表中删除碰撞体,请选择碰撞体,然后单击 移除(Remove (-) 按钮。如果你尚未将碰撞体分配给列表的索引,则可以使用空条目右侧较小的 添加(Add) (+) 按钮来创建和分配新的碰撞体。这将创建一个新的 碰撞体(Collider)游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表作为粒子系统通过在场景中生成大量小型 2D 图像并为其设置动画来模拟流体实体(如液体、云和火焰)的组件。更多信息
请参阅术语表并附加一个球体碰撞体球体形状的碰撞器组件,用于处理游戏对象(如球或其他物体)的碰撞,这些物体可以大致近似为物理目的的球体。更多信息
请参阅术语表,然后将 Collider 分配给空条目。
添加碰撞体后,你可以指定粒子在满足传递特定触发器事件类型的条件时执行的作。有四种事件类型描述了粒子如何与碰撞体交互。它们是:
在检查器一个Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
请参阅术语表中,每种事件类型都有一个下拉菜单,可让您选择粒子通过触发器事件的条件时应发生的情况。选项包括:
如果选择 回调(Callback) 作为对其中一个触发器事件的反应,则可以从附加的脚本中访问满足事件条件的粒子。为此,你首先需要将OnParticleTrigger()函数添加到附加的脚本中。在此函数中,调用 ParticlePhysicsExtensions.GetTriggerParticles() 函数以获取满足触发器事件条件的粒子列表。此函数采用 ParticleSystemTriggerEventType,该类型指定要获取粒子的触发器事件(内部、外部、进入或退出),以及粒子粒子系统发出的小型简单图像或网格。粒子系统可以显示和移动大量粒子以表示流体或无定形实体。所有粒子一起产生的效果会产生完整实体的印象,例如烟雾。更多信息
请参阅术语表函数使用结果填充其中。从列表中,您可以访问、修改或销毁任何粒子。该函数还可以采用一个可选参数,该参数输出碰撞当物理引擎检测到两个游戏对象的碰撞器接触或重叠时,当至少一个游戏对象具有刚体组件并且处于运动状态时,就会发生碰撞。更多信息
请参阅术语表信息,例如每个粒子触发了哪个碰撞体。碰撞体查询模式(Collider Query Mode) 属性控制通过此参数提供哪些信息。
有关 API 及其使用方法的更多信息,请参阅以下示例。
下面的示例会导致粒子在进入碰撞体边界时变为红色,然后在离开碰撞体边界时变为绿色。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[ExecuteInEditMode]
public class TriggerScript : MonoBehaviour
{
ParticleSystem ps;
// these lists are used to contain the particles which match
// the trigger conditions each frame.
List<ParticleSystem.Particle> enter = new List<ParticleSystem.Particle>();
List<ParticleSystem.Particle> exit = new List<ParticleSystem.Particle>();
void OnEnable()
{
ps = GetComponent<ParticleSystem>();
}
void OnParticleTrigger()
{
// get the particles which matched the trigger conditions this frame
int numEnter = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
int numExit = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
// iterate through the particles which entered the trigger and make them red
for (int i = 0; i < numEnter; i++)
{
ParticleSystem.Particle p = enter[i];
p.startColor = new Color32(255, 0, 0, 255);
enter[i] = p;
}
// iterate through the particles which exited the trigger and make them green
for (int i = 0; i < numExit; i++)
{
ParticleSystem.Particle p = exit[i];
p.startColor = new Color32(0, 255, 0, 255);
exit[i] = p;
}
// re-assign the modified particles back into the particle system
ps.SetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
ps.SetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
}
}
有关此示例的结果,请参阅下图:
以下示例利用了您可以从GetTriggerParticles()功能。它会导致第一个碰撞体边界内的粒子变为红色,第二个碰撞体边界内的粒子变为蓝色,或者两个碰撞体内部的粒子变为绿色。如果粒子不在碰撞体内,它也会将粒子变成白色。在本例中,碰撞体查询模式(Collider Query Mode) 设置为 全部(All)。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[ExecuteInEditMode]
public class TriggerScript : MonoBehaviour
{
void OnParticleTrigger()
{
ParticleSystem ps = GetComponent();
// particles
List inside = new List();
List exit = new List();
// get
int numInside = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Inside, inside, out var insideData);
int numExit = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
// iterate
for (int i = 0; i < numInside; i++)
{
ParticleSystem.Particle p = inside[i];
if (insideData.GetColliderCount(i) == 1)
{
if (insideData.GetCollider(i, 0) == ps.trigger.GetCollider(0))
p.startColor = new Color32(255, 0, 0, 255);
else
p.startColor = new Color32(0, 0, 255, 255);
}
else if (insideData.GetColliderCount(i) == 2)
{
p.startColor = new Color32(0, 255, 0, 255);
}
inside[i] = p;
}
for (int i = 0; i < numExit; i++)
{
ParticleSystem.Particle p = exit[i];
p.startColor = new Color32(1, 1, 1, 255);
exit[i] = p;
}
// set
ps.SetTriggerParticles(ParticleSystemTriggerEventType.Inside, inside);
ps.SetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
}
}
有关此示例的结果,请参阅下图: