我最近开始编写Unity的代码,试图制作一个游戏。一直以来都很顺利,但我遇到了一个问题。我为攻击系统实现了一个脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AttackDamage : MonoBehaviour
{
private float attackDamage = 20;
private void OnTriggerEnter2D(Collider2D other)
{
if (other.GetComponent<Health>() != null)
{
Health health = other.GetComponent<Health>();
health.TakeDamage(attackDamage);
}
}
}
我还为卫生系统实施了一个项目:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class Health : MonoBehaviour
{
public Image healthBar;
public float healthAmount = 100;
private void Update()
{
if (healthAmount <= 0)
{
SceneManager.LoadScene(0);
}
}
public void TakeDamage(float Damage)
{
healthAmount -= Damage;
healthBar.fillAmount = healthAmount / 100;
}
public void Healing(float healPoints)
{
healthAmount += healPoints;
healthAmount = Mathf.Clamp(healthAmount, 0, 100);
healthBar.fillAmount = healthAmount / 100;
}
}
而且效果很好。但是正如你在标题上看到的,攻击只有在我移动后才起作用。如果我不移动的时候攻击,攻击区域会出现在场景中,但是不会造成伤害。我不知道为什么。
你知道问题出在哪里吗?
这里还有一个视频实际发生了什么,在游戏中:https://drive.google.com/drive/folders/1BTYTNz_yzus-eRLnjsgB0hsYLU5sQm2k?usp=sharing
我不知道如何解决这个问题,因为我已经从网上的一个源代码复制,它实际上工作properly。
代码是完全相同的,除了卫生系统的脚本,这是没有显示在视频中,但这也不应该有太大的区别。
所以我真的不知道该怎么处理。
谢谢你的帮助:)
1条答案
按热度按时间zf9nrax11#
如果你想在任何生命角色处于触发状态时造成持续伤害,请使用
OnTriggerStay2d
。否则,如果你想在用户按下按钮时造成伤害,你可以执行以下操作:
1.拥有一个能储存射程内所有敌人的命中盒子对撞机。(当敌人进入命中盒子时,将其添加到列表中,当敌人退出时,将其从列表中删除。)
1.当攻击触发时,从
1.
中取出列表中的所有敌人,并对其造成伤害。代码方面,看起来像这样:
然后在其他地方...(例如,在您的播放器中。)
最后,如果你想在动画中的特定点造成伤害,你应该搜索的术语是 * 关键帧 *。查找关于 * 动画 * 的教程,然后是 * 关键帧 *。
一旦你了解了它,你可以使用上面提到的方法,但调用你所需的关键帧损坏脚本。