c# - 在弹丸上行走,不会发生碰撞,但由于步距偏移,玩家会跳上它们
问题描述
标题说明了一切,弹丸只有在玩家静止不动时才会击中玩家并消失,如果他正在移动,玩家将“跳”在子弹头上并走过它们,不会触发碰撞而不做真的什么都有。
我试图实现的是子弹会穿过玩家,但如果它们确实与玩家发生碰撞,仍然会检测到碰撞,因此角色控制器永远不会在它们身上行走,或者它们应该在玩家获得之前与玩家发生碰撞有机会从他们身上走过。这个问题与角色控制器组件中的“Step Offset”功能有关,因为当我将它设置为 0.05 时,这个问题不会发生,但我不能这样做,因为我的角色需要能够上楼梯或走小壁架。
非常感谢!
void OnCollisionEnter(Collision other)
{
if (other.gameObject.CompareTag("Player"))
{
scrCh = other.gameObject.GetComponent<scr_CharacterController>();
calculatedDamage = Random.Range(minDamage, maxDamage);
if (scrCh != null && scrCh.currentHealth > 0)
{
CancelInvoke("Remove");
gameObject.SetActive(false);
scrCh.TakeDamage(calculatedDamage);
if (gameObject.CompareTag("Special Bullet"))
{
scrCh.TakeDamage(calculatedDamage * 3);
gameObject.SetActive(false);
}
}
}
if (other.gameObject.CompareTag("Unbreakable"))
{
gameObject.SetActive(false);
}
}
解决方案
有两种方法可以解决此问题:
要么更改角色控制器碰撞框(它是一个圆柱体)的大小,使其大小小于角色网格碰撞器,这样子弹将与网格碰撞而不是与角色控制器发生碰撞。
或者您可以将角色控制器设置在不同的层上,一个不与子弹碰撞的层,结果是相同的,子弹现在只会与角色网格碰撞器发生碰撞。
推荐阅读
- facebook - 如何使用 Facebook 营销 API 获取广告活动的受众人口统计详细信息?
- python - 这个冒号是什么意思?
- c# - 使用 ObjectResult 将 EF6 转换为 EF 核心
- git - 根文件系统的git版本控制目录
- html - 弹性增长的弹性盒容器中的动态弹性项目高度
- javascript - 即使在使用 setTimeOut 之后,setState 也会立即更新
- c# - asp.net web 表单中站点地图权限中的用户权限
- python - 如何理解 Class 中的 `self.fields`?
- mysql - 删除相似记录时我的 SQL 查询出错
- angular - 在模板中使用表达式作为输入值