Мой игрок умирает от прикосновения к любому предмету с помощью коллайдера - PullRequest
0 голосов
/ 02 мая 2019

Я хочу сделать игру, и я хочу, чтобы мой игрок перепрыгивал с одного объекта на другой, и когда он касался земли, умирал.Мой игрок умирает, когда он что-то трогает, как я могу заставить его умереть только тогда, когда он касается земли?Это мой код ниже

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 голосов
/ 02 мая 2019

Вы можете установить метку для своего наземного игрового объекта.Ваш новый OnCollisionEnter2D будет выглядеть следующим образом.

private void OnCollisionEnter2D(Collision2D collision){

if (collision.gameObject.CompareTag("ground")) // this will return true if the collision gameobject has ground tag on it.
{
    isDead = true;
    rb2d.velocity = Vector2.zero;
    GameController.Instance.Die();
}}
0 голосов
/ 02 мая 2019

Таким образом, в методе OnCollisionEnter2D() любой код внутри будет срабатывать каждый раз, независимо от того, что попадет в него. Тем не менее, вы можете получить данные о столкновении, чтобы определить, попало ли оно в вашу землю. Лучший способ сделать это - использовать систему слоев Unity .

Сначала вы захотите создать слой (перейдите в «Настройки проекта»> «Теги и слои». Обязательно запомните, какое число было слева от названия вашего слоя) для всех ваших основных элементов, а затем назначьте их этому. слой. Когда вы сталкиваетесь с чем-то, вы можете проверить, находится ли он на этом слое, используя оператор 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...