【发布时间】:2021-07-12 16:55:30
【问题描述】:
我是 Unity 新手,我和几个朋友一起尝试制作游戏。我试图将我造成的健康条与你可以通过射击刀造成的伤害联系起来。首先测试这个我用过:
void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse1))
{
TakeDamage(25);
}
}
一切正常,当我按下鼠标 1 时,生命条工作。我的目标是,当一把刀击中敌人时,造成 25 点伤害,并且生命条显示敌人失去了生命值。然而,当刀子击中敌人时,什么也没有发生。你能帮我吗,因为我尝试修复这个问题 3 个小时,我有点沮丧。谢谢。
这是健康栏的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class healthbar : MonoBehaviour
{
public Slider slider;
public void SetMaxHealth(int health)
{
slider.maxValue = health;
slider.value = health;
}
public void SetHealth(int health)
{
slider.value = health;
}
}
这是敌人的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy_Follow : MonoBehaviour
{
public float speed;
public Transform target;
public int damage = 25;
public int maxHealth = 100;
public int currentHealth;
public healthbar healthBar;
// Start is called before the first frame update
void Start()
{
currentHealth = maxHealth;
healthBar.SetMaxHealth(maxHealth);
target = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse1))
{
TakeDamage(25);
}
transform.position = Vector2.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
}
public void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Knife")
{
TakeDamage(25);
}
}
public void TakeDamage(int damage)
{
currentHealth -= damage;
healthBar.SetHealth(currentHealth);
}
}
【问题讨论】:
-
你确定 a)
OnTriggerEnter2D被调用了吗?你的对象有Collider2D吗?其中一个对撞机是isTrigger吗?如果有的话,你至少有一个Rigidbody2D吗? b) 标签是否正确?通常使用CompareTag而不是==以避免因拼写错误而出现静默失败。 c)您在控制台中是否遇到任何错误?除了这些,我不明白为什么这不起作用 -
啊,你把对撞机组件附加到你的敌人和刀上了吗?除非您将碰撞对撞机附加到您的组件,否则 OnTriggerEnter2D 不起作用。
-
它可能不起作用的原因只是一个视图。 1. 错误的标签。 2. No Collider 3. Collider 未设置为触发器。我想这是最后一个,你可能会切换到
OnCollisionEnter2D -
@hunnedsd 您收到此错误是因为您使用 Collider2D 而不是 Collision2D。您的代码应如下所示
void OnCollisionEnter2D(Collision2D collision) { // TODO } -
现在可以使用了。谢谢你们。你帮了我很多