我正试图让我的播放器在场景中点亮火炬,但不太确定如何做到这一点。
我有一个带有粒子系统的火炬预制件。每次玩家的火炬碰撞到一个未点燃的火炬时,我希望火炬开始燃烧。
我一直在尝试关注文档,但却无法理解(https://docs.unity3d.com/ScriptReference/ParticleSystem.html,https://docs.unity3d.com/ScriptReference/ParticleSystem.Play.html)。
此处也发布了此问题:https://answers.unity.com/questions/1491419/having-player-light-torches-using-particle-system.html
我目前的代码如下。我将每个火炬对象标记为火炬,我的播放器标记为播放器。除了玩家的火炬之外,所有的粒子系统都有“Play on Awake”关闭和预热。
有任何建议或提示吗?
谢谢!
/*
* Attach this script to all the torches. It will be used to start the fire
using OnCollision?/OnTrigger? See which is better
* Start with the particle effect/light being off, get all the components
* Turn the torches on when the player's torch collides with them
* 1.) Must make sure each torch object has a collider
* */
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StartFire : MonoBehaviour
{
public GameObject torch;
public ParticleSystem fireParticleSystem;
bool lightOn;
void Start()
{
lightOn = false; //Start with the light off
fireParticleSystem = GetComponent<ParticleSystem>(); //get Particle System
torch = GetComponent<GameObject>(); //get Torch
}
/*
* if player's torch hits this torch (that is not lit)
* Turn on the fire
* Set the light being on to true
* */
private void OnCollisionEnter(Collision collision)
{
if(this.gameObject.tag==("torch") && collision.gameObject.tag==("Player") && lightOn==false)
{
fireParticleSystem.Play(); //start the particle system
lightOn = true;
}
}
}
答案 0 :(得分:0)
我在一些项目中使用了以下代码:
private ParticleSystem _particleSystem;
private ParticleSystem.EmissionModule _emissionModule;
private void Awake()
{
_particleSystem = GetComponent<ParticleSystem>();
_emissionModule = _particleSystem.emission;
_emissionModule.enabled = false;
}
private void OnCollisionEnter(Collision collision)
{
_emissionModule.enabled = true;
_particleSystem.Play();
}
我相信你错过了排放模块。
答案 1 :(得分:0)
1 。创建您的ParticleSystem
并将其GameObject的标记更改为&#34;火炬&#34;。
2 。使用ParticleSystem将BoxCollider连接到SphereCollider到该GameObject。
3 。从#2 创建的对撞机的IsTrigger
标记为真,因为触碰碰撞是不合理的。看起来你只想检测玩家何时接触它。
4 。触摸脚本应附加到播放器而不是触摸。使用OnTriggerEnter
处理检测并检测玩家何时触摸触摸灯,然后使用GetComponent
获取ParticleSystem
并播放。在OnTriggerExit
中停止粒子。
如果您确实希望玩家碰撞并通过触摸停止,则忽略#2 ,并使用OnCollisionEnter
和OnCollisionExit
代替OnTriggerEnter
和{ {1}}。
附加到播放器:
OnTriggerExit