Unity3D:使用ParticleSystem和OnCollisionEnter让玩家轻便火把?

时间:2018-04-09 12:45:38

标签: c# unity3d

我正试图让我的播放器在场景中点亮火炬,但不太确定如何做到这一点。

我有一个带有粒子系统的火炬预制件。每次玩家的火炬碰撞到一个未点燃的火炬时,我希望火炬开始燃烧。

我一直在尝试关注文档,但却无法理解(https://docs.unity3d.com/ScriptReference/ParticleSystem.htmlhttps://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;
        }
    }
 }

2 个答案:

答案 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 ,并使用OnCollisionEnterOnCollisionExit代替OnTriggerEnter和{ {1}}。

附加到播放器:

OnTriggerExit