我想做一个游戏,我想让我的玩家从一个物体跳到另一个物体,当它触地而死时。我的玩家在触摸任何东西时都会死亡,如何使他在触摸地面时死亡?这是我的代码在下面
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();
}
}
答案 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