Unity粒子系统在碰撞后发挥作用

时间:2017-09-05 12:01:52

标签: c# unity3d project collision particle-system

我在Unity制作了一个项目,一个明确的游戏。所以玩家有一辆科幻汽车,他试图避开障碍物。 当汽车撞到一块石头时,游戏管理器会加载"积分"屏幕在退出或重启之间进行选择。 我的问题是,当汽车继续运行时,我想让摇滚爆炸,然后游戏管理器将加载"积分"屏幕。

我的一些代码:

对于玩家碰撞:

public class PlayerCollision : MonoBehaviour {

    public PlayerMovement movement;     
    public static bool y = true;

    public void OnCollisionEnter (Collision collisionInfo)
    {
        // We check if the object we collided with has a tag called "Obstacle".
        if (collisionInfo.collider.tag == "Obstacle")
        {          
            movement.enabled = false;   // Disable the players movement.
            y = false;
            FindObjectOfType<GameManager>().EndGame();            
        }
    }
} 

游戏经理:

public class GameManager : MonoBehaviour {

bool gameHasEnded = false;

public float restartDelay = 1f;

public GameObject completeLevelUI;

public void CompleteLevel ()
{
    completeLevelUI.SetActive(true);
}

public void EndGame ()
{
    if (gameHasEnded == false)
    {
        gameHasEnded = true;
        Debug.Log("GAME OVER");
        Invoke("Restart", restartDelay);
    }
}

void Restart ()
    {
         SceneManager.LoadScene("Credits");
         //SceneManager.LoadScene(SceneManager.GetActiveScene().name);
     }
}

endTrigger:

public class EndTrigger : MonoBehaviour {

    public GameManager gameManager;

    void OnTriggerEnter ()
    {
        gameManager.CompleteLevel();
    }
}

LevelComplete:

public class LevelComplete : MonoBehaviour {

    public void LoadNextLevel ()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1); 
    }
}

菜单:

public class Menu : MonoBehaviour {

    public void StartGame ()
    {
         SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);  
    }
}

我写了其他脚本。如果你想要什么,请告诉我。谢谢你们。

2 个答案:

答案 0 :(得分:0)

为您的岩石添加粒子系统。取消选中&#34;循环&#34;并且&#34;玩清醒&#34;。然后你可以通过添加下面的行来玩。

public void OnCollisionEnter (Collision collisionInfo)
{
    // We check if the object we collided with has a tag called "Obstacle".
    if (collisionInfo.collider.tag == "Obstacle")
    {          
        movement.enabled = false;   // Disable the players movement.
        y = false;
        collisionInfo.gameObject.GetComponent<ParticleSystem>().Play(); // play the explosion
        FindObjectOfType<GameManager>().EndGame();            
    }
}

答案 1 :(得分:0)

我会改变你的做法。据我所知,你已经有了一个endTrigger [有一个Collider Trigger],如果玩家进去的话就会结束游戏。因此,取消选中玩家对撞机中的触发器,而不是将该触发器添加到岩石对撞机,因此当玩家崩溃时,它将:

  • 激活粒子系统
  • 使岩石隐形
  • 结束游戏

您可以将此脚本添加到您的摇滚中,看看它是如何工作的

public class RockTrigger : MonoBehaviour {

    public GameManager gameManager;
    ParticleSystem myParticleSystem;

    void Awake()
    {
        myParticleSystem = GetComponent<ParticleSystem>();
    }

    void OnTriggerEnter(Collider other)
    {
        myParticleSystem.Play();
        GetComponent<MeshRenderer>.enabled = false;
        gameManager.GetComponent<GameManager>().EndGame();

    }
}

关于OnTriggerEnter 的注意事项:如果你只让玩家在场景中移动,这就好了(我使用你在EndGame中使用的相同模式), 但是如果有其他GameObject与RigidBody一起移动 场景你应该检查other是否确实是玩家。通常标记播放器并检查if(other.tag == "Player")