【发布时间】:2020-07-19 11:40:07
【问题描述】:
我想在我的玩家剑上创建一个对撞机,如果他攻击他会检测到,并通过动画事件关闭/打开一个名为 (Damage Point) 的游戏对象,该游戏对象是附加的脚本,会减去敌人的生命值。 但是在某个地方它没有正确检测到。我尝试添加 OnDrawGizmos 函数来查看我的球体对撞机,但即使将其放大后也无法检测到。
关于我的问题最奇怪的是,我对我的怪物宝箱和我的幻想玩家使用相同的代码,但是对于宝箱它可以工作,但对于玩家它却不行。
我创建了一个名为 PlayerDamage 的类,它附加在我剑尖上的一个空游戏对象上。
{
public class PlayerDamage : MonoBehaviour
public int damageAmount = 2;
public LayerMask enemyLayer;
void Update()
{
Collider[] hits = Physics.OverlapSphere(transform.position, 1.7f, enemyLayer);
if (hits.Length > 0)
{
if (hits[0].gameObject.tag == MyTags.ENEMY_TAG)
{
print("COLLIDED WITH ENEMY");
}
}
}
private void OnDrawGizmos()
{
Gizmos.DrawWireSphere(transform.position, 1.7f);
}
在另一个直接附加到播放器的名为 PlayerScript 的脚本中,我有一个名为 Attack 的函数:
void Attack()
{
if (Input.GetKeyDown(KeyCode.K))
{
if (!anim.GetCurrentAnimatorStateInfo(0).IsName(MyTags.ATTACK_ANIMATION) || !anim.GetCurrentAnimatorStateInfo(0).IsName(MyTags.RUN_ATTACK_ANIMATION))
{
anim.SetTrigger(MyTags.ATTACK_TRIGGER);
}
}
}
PlayerScript 类中还有两个函数,分别称为 ActivateDamagePoint 和 DeactivateDamagePoint,它们被分配给攻击动画的动画事件。
void ActivateDamagePoint()
{
damagePoint.SetActive(true);
}
void DeactivateDamagePoint()
{
damagePoint.SetActive(false);
}
我仔细检查了所有内容都在他的层上,并且标签没问题,但这并没有解决我的问题。
就像我之前所说的胸部,我使用相同的代码并且它可以工作,但不幸的是它不适用于我的播放器。我还有激活和停用 DamagePoint 函数,这些函数也被我的胸部攻击动画的动画事件调用。
【问题讨论】:
-
所以检查你的玩家什么时候“击中”它首先返回的东西,它可能是当它击中一个敌人时它没有击中你认为它首先击中的东西。你可能需要检查所有的命中并查看如果敌人在其中
-
我做到了,但事实并非如此,经过一小时的调试,我终于找到了解决方案。我的助手类中出现拼写错误,而不是公共静态字符串 ENEMY_TAG = "Enemy" 我将它拼写为 "Enemy";。所以这就是问题所在,知道一切正常
标签: unity3d game-physics physics collision