首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Physics.IgnoreCollision什么都不做

Physics.IgnoreCollision什么都不做
EN

Stack Overflow用户
提问于 2016-07-27 03:20:07
回答 1查看 1.7K关注 0票数 1

我在试着做一个BTD游戏。由于不同的气球(敌人)具有不同的速度,它们在路径上移动时会相互碰撞。我目前使用的是以下代码:

代码语言:javascript
复制
void OnCollisionEnter (Collision coll)
{
    if (coll.gameObject.tag == "Enemy")
    {
        Physics.IgnoreCollision(coll.collider, gameObject.GetComponent<SphereCollider>());

    }
}

然而,它似乎根本不起作用。敌人之间仍然相互冲突。另一方面,与敌人的碰撞和来自塔楼的子弹正在发挥作用。

代码语言:javascript
复制
void OnTriggerEnter (Collider col)
{
    if (col.tag == "Bullet")
    {
        CurrentHP -= col.GetComponent<TackShooterBullet>().Damage;
    }  

我已经尝试了层碰撞(敌人到同一层&在层碰撞矩阵中取消对同一层碰撞的检查,但这也不起作用。敌人包含一个球体网格过滤器,球体对撞机,网格渲染器,刚体,材质和2个脚本。有没有更好的方法来避免敌人之间的冲突。我之所以问这个问题,是因为我看到了重复的版本,但他们的解决方案根本不起作用。如果需要,我可以提供更多的代码。

为清晰起见进行编辑:同样,我试图实现的是让敌人能够互相穿透。

编辑(修正问题):我发现为了避免敌人的碰撞,我也可以移除刚体。然而,移除弹体会使敌人职业中的子弹-->敌人触发器变得混乱。因此,我只是在bullet类中编写了bullet与enemy之间的碰撞。

代码语言:javascript
复制
using UnityEngine;

public class TackShooterBullet : MonoBehaviour {

private GameObject target;
public float Damage;

// Use this for initialization
void Start () {
    target = transform.parent.GetComponent<TackShooterRange>().Target; // Target = Enemy[0] (First Enemy To Enter Range - Enemy is Removed from JList when exiting Range)
}

// Update is called once per frame
void Update()
{

    Damage = gameObject.transform.parent.transform.parent.GetComponent<TackShooterLimitingRange1>().level * 20; // Upgrade Level * 20 = Damage Done

    if (target == null) // If Enemy Exits Range
    {
        Destroy(gameObject); // Destroy Bullet
    }
    if (target != null) // Enemy Exists In Range
    {
        transform.position = Vector3.MoveTowards(transform.position, target.transform.position, 20 * Time.deltaTime); // Bullet Follows Enemy
        Destroy(gameObject); // Destroy Bullet Upon Contact With Enemy
        target.GetComponent<HealthOfEnemy>().CurrentHP -= Damage; // Enemy Loses Health
    }
}

如前所述,这允许我从Enemy类中删除OnTriggerEnter & OnCollisionEnter方法以及RigidBody,因此这些属性不再影响敌人之间的冲突。

EN

回答 1

Stack Overflow用户

发布于 2018-10-09 16:56:17

Unity有一个内置的功能,可以更轻松地进行碰撞检测,称为基于层的碰撞检测:

https://docs.unity3d.com/Manual/LayerBasedCollision.html

文档真的很好。如果您需要进一步的澄清,只需评论即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38598217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档