首页 > 解决方案 > 我希望我的玩家在触摸多个具有不同标签的对象时死亡

问题描述

当我的玩家触摸两个具有不同标签的不同游戏对象时,我怎样才能让他死掉。当玩家接触到“敌人”标签和“地面”标签时,他应该死亡。另外,我没有尝试对地面对象使用相同的敌人标签,因为我已经在我的其他脚本中使用了“敌人”标签。

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;
    private Score gm;

    void Start()
    {
        rb2d = GetComponent<Rigidbody2D>();
        gm = GameObject.FindGameObjectWithTag("gameMaster").GetComponent<Score>();
    }

    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)
    {
        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();
        }
    }

    void OnTriggerEnter2D(Collider2D col)
    {
        if( col.CompareTag("coin"))
        {
            Destroy(col.gameObject);
            gm.score += 1;
        }
    }
}

标签: c#unity3d

解决方案


我想你可能问错了这个问题,你的意思是玩家如果击中地面或敌人就会死亡,而不是同时击中两者。一个简单的解决方法是按照 Nikola 的建议做一个小的改动:

private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.CompareTag("ground") || collision.gameObject.CompareTag("enemy"))
    {
        isDead = true;
        rb2d.velocity = Vector2.zero;
        GameController.Instance.Die();
    }
}

推荐阅读