c# - 我希望我的玩家在触摸多个具有不同标签的对象时死亡
问题描述
当我的玩家触摸两个具有不同标签的不同游戏对象时,我怎样才能让他死掉。当玩家接触到“敌人”标签和“地面”标签时,他应该死亡。另外,我没有尝试对地面对象使用相同的敌人标签,因为我已经在我的其他脚本中使用了“敌人”标签。
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;
}
}
}
解决方案
我想你可能问错了这个问题,你的意思是玩家如果击中地面或敌人就会死亡,而不是同时击中两者。一个简单的解决方法是按照 Nikola 的建议做一个小的改动:
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("ground") || collision.gameObject.CompareTag("enemy"))
{
isDead = true;
rb2d.velocity = Vector2.zero;
GameController.Instance.Die();
}
}
推荐阅读
- c++ - 用于调用另一个方法的方法的结果会产生不一致的结果?
- vb.net - 如何在 Visual Basic 中以某种格式获取单位数天数?
- python - 输入后如何检查任何内容
- symfony - Unable to update composer
- java - Quarkus Camel Rest Route 引发 401 异常
- mysql - 如何获取where子句以返回一列的值在另一列日期之前但仍返回值为空的行
- wiremock - 是否可以在wiremock模板中链接字符串命令
- angular - 将 ng-bootstrap 11.0.0-beta.x 与 Angular 13 rc 一起使用
- javascript - Angular 12 - 每个页面上具有动态内容的打印标题与 ngfor 中的最后一项重叠
- javascript - Jquery datepicker 最初不是在选择时打开的