我的玩家死于使用盒对撞机触摸任何物体

时间:2019-05-01 22:29:58

标签: unity3d unityscript

我想做一个游戏,我想让我的玩家从一个物体跳到另一个物体,当它触地而死时。我的玩家在触摸任何东西时都会死亡,如何使他在触摸地面时死亡?这是我的代码在下面

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move2d : MonoBehaviour
{
    public float playerSpeed;  //allows us to be able to change speed in Unity
    public Vector2 jumpHeight;
    public bool isDead = false;
    private Rigidbody2D rb2d;

    // Use this for initialization
    void Start()
    {
        rb2d = GetComponent<Rigidbody2D>();

    }
    // Update is called once per frame
    void Update()
    {
        if (isDead) { return; }
        transform.Translate(playerSpeed * Time.deltaTime, 0f, 0f);  //makes player run

        if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space))  //makes player jump
        {
            GetComponent<Rigidbody2D>().AddForce(jumpHeight, ForceMode2D.Impulse);
        }
    }
    private void OnCollisionEnter2D(Collision2D collision)
    {
        isDead = true;
        rb2d.velocity = Vector2.zero;
        GameController.Instance.Die();
        
    }
}

2 个答案:

答案 0 :(得分:0)

因此,在方法OnCollisionEnter2D()中,无论里面有什么代码,每次被触发都将触发 时间,无论它被击中了什么。但是,您可以检索有关碰撞的数据以确定它是否撞到了地面。最好的方法是使用Unity的layer system

首先,您将要为所有基础作品创建一个图层(进入“项目设置”>“标签和图层”。请确保记住图层名称左侧的数字),然后将其分配给该图层层。当您与某物碰撞时,您可以使用if语句来检查它是否在该层上。

private void OnCollisionEnter2D(Collision2D collision)
{
    // Foo represents the number of the layer that the ground is assigned to.
    if (collision.collider.gameObject.layer == foo)
    {
        isDead = true;
        rb2d.velocity = Vector2.zero;
        GameController.Instance.Die();
    }
}

答案 1 :(得分:0)

您可以为地面游戏对象设置标签。 您的新OnCollisionEnter2D如下所示。

Ext.isIE