首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在代码中让播放器忽略与另一个GameObject的冲突?

如何在代码中让播放器忽略与另一个GameObject的冲突?
EN

Stack Overflow用户
提问于 2021-08-21 10:12:20
回答 1查看 72关注 0票数 1

我目前正在尝试为我的游戏编写一个健康系统,我希望我的玩家GameObject忽略与健康药水GameObject的冲突,如果玩家有最大的健康。我的问题是,我不能简单地关闭玩家层和健康药水层之间的碰撞,因为我只想忽略碰撞,如果玩家有最大健康。我试着自己做,但没有效果。下面是我的代码:

代码语言:javascript
运行
复制
public class ExampleCodeUA : MonoBehaviour{

public int PlayerMaxHealth = 100, PlayerCurrentHealth;
public HealthBar healthBar;

private void Start()
{
    PlayerCurrentHealth = PlayerMaxHealth;
}

    private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.CompareTag("HealthPotion"))
    {
        if (PlayerCurrentHealth == PlayerMaxHealth)
        {
            Physics2D.IgnoreLayerCollision(6, 7);
        }
        else if (PlayerCurrentHealth > 50)
        {
            GetHealth(PlayerMaxHealth - PlayerCurrentHealth);
        }
        else if (PlayerCurrentHealth <= 50)
        {
            GetHealth(50);
        }

    }
}

void GetHealth(int healing)
{
    PlayerCurrentHealth += healing;
    healthBar.SetHealth(PlayerCurrentHealth);
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-21 11:51:43

你不想在运行时修改你的物理配置。你能做些什么来避免碰撞...就是让它变得不可能,因为没有东西可以碰撞。你的两个物体都有一个碰撞器。您可以做的是通过修改代码禁用所有现有的HealthPotion对撞器。实现可能如下所示:

代码语言:javascript
运行
复制
using System.Collections.Generics;
using UnityEngine;

public class HealthPotion : MonoBehaviour
{
    private static List<HealthPotion> _existingPotions = new List<HealthPotion>();

    public static void EnablePotionsCollider(bool value)
    {
        foreach (var potion in _existingPotions)
        {
            potion._collider.enabled = value;
        }
    }

    private Collider _collider;

    void Awake()
    {
        _collider = GetComponent<Collider>();
    }

    void OnEnable()
    {
        _existingPotions.Add(this);
    }

    void OnDisable()
    {
        _existingPotions.Remove(this);
    }
}

然后,当您想要通过执行以下操作来启用/禁用时,您只需调用该方法

代码语言:javascript
运行
复制
HealthPotion.EnablePotionsCollider(value you want);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68872058

复制
相关文章

相似问题

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