Unity C# 3D碰撞触发器近战伤害脚本运行异常,误伤自身武器对象
Unity近战攻击脚本碰撞误判问题
我编写了一套对敌造成伤害的逻辑脚本,将其挂载在带有触发类型Box Collider的武器对象上,预期逻辑为武器命中指定GameObject后,获取其生命值属性并扣除对应伤害值。但实际运行时除敌方对象外,武器自身对象也会被判定为命中目标。我对Unity的碰撞机制理解尚不完善,无法定位问题原因,按现有认知原有逻辑应当正常运行。
问题解决
经过反复调试我已自行解决该问题,将所有攻击相关逻辑迁移到父对象下的独立新对象中后,功能恢复正常。
经验总结
不要在同一个对象上同时实现攻击和受击逻辑
关联代码
public class MeleeAttackScript : MonoBehaviour { public float Range = 1.0f; public float AttackSpeed = 1.2f; public float AttackCooldown = 0f; public float Damage = 5f; bool Collision = false; BoxCollider RangeCollider; Collider HitObject; public void Awake() { RangeCollider = GetComponent<BoxCollider>(); RangeCollider.size = new Vector3(1, 1, Range); RangeCollider.center = new Vector3(0, 0.00001f, (RangeCollider.size.z+1)/2); } public void Update() { if (AttackCooldown > 0) { AttackCooldown -= Time.deltaTime; } if (Mathf.Clamp(AttackCooldown, 0, (1 / AttackSpeed)) == 0 && Collision && HitObject.gameObject.tag == "Object") { Attack(); Collision = false; } } private void OnTriggerStay (Collider collider) { if (collider.GetComponent<Collider>().GetType() == typeof(CapsuleCollider)) { Debug.Log(collider.name); HitObject = collider; Collision = true; } } public void Attack() { HitObject.gameObject.GetComponent<LifePointScript>().CurrentLifePoints -= Damage; AttackCooldown = 1 / (AttackSpeed); } }
效果展示

内容的提问来源于stack exchange,提问作者Kara55555
相关产品推荐
相关产品推荐

