Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 启用&;当玩家接近&;时禁用树网格碰撞器;远离树木_C#_Unity3d_Collision_Unityscript - Fatal编程技术网

C# 启用&;当玩家接近&;时禁用树网格碰撞器;远离树木

C# 启用&;当玩家接近&;时禁用树网格碰撞器;远离树木,c#,unity3d,collision,unityscript,C#,Unity3d,Collision,Unityscript,我制作了一个森林场景,基本上到处都是树(tree density=max),但是这些树可以很容易地穿过。所以我在每棵树上都添加了网格碰撞器,当我按下play时,游戏变得非常慢,fps小于10 Unity是否有办法禁用距离玩家10个单位(半球半径)的树木网格碰撞器,并在玩家靠近它时启用它 当需要脚本时,可以使用C#和UnityScript。最简单的方法是添加CapsuleCollider而不是MeshCollider。这将在很大程度上提高你的fps。否则,您必须手动执行此操作,方法是维护所有渲染器

我制作了一个森林场景,基本上到处都是树(tree density=max),但是这些树可以很容易地穿过。所以我在每棵树上都添加了网格碰撞器,当我按下play时,游戏变得非常慢,fps小于10

Unity是否有办法禁用距离玩家10个单位(半球半径)的树木网格碰撞器,并在玩家靠近它时启用它


当需要脚本时,可以使用
C#
UnityScript

最简单的方法是添加
CapsuleCollider
而不是
MeshCollider
。这将在很大程度上提高你的fps。否则,您必须手动执行此操作,方法是维护所有渲染器或碰撞器的列表,并根据您的要求打开和关闭它们。

切勿在Unity中使用
MeshCollider
。而是使用
CapsuleCollider
BoxCollider
。 对于您的问题,如果您只是不想让人走过这棵树,我建议使用距离,如下所示:

if(Vector3.Distance(person.position,Tree.position) < (Tree.radius + person.radius)) {
    //can't pass
}
if(矢量3.距离(人.位置,树.位置)<(树.半径+人.半径)){
//不能通过
}

我相信它会比collider快。

是的,你可以这样做,首先你必须通过矢量找到你的玩家和树之间的距离。距离检查unity doc for vector3。距离,当你的玩家靠近树时,你通过gameobject找到你的树。查找并启用和禁用你的gameobject,如:

public class EnableComponents : MonoBehaviour
{
    private Light myLight;


    void Start ()
    {
        myLight = GetComponent<Light>();
    }


    void Update ()
    {
        if(Input.GetKeyUp(KeyCode.Space))
        {
            myLight.enabled = !myLight.enabled;
        }
    }
}
公共类使能组件:MonoBehavior
{
私人灯光myLight;
无效开始()
{
myLight=GetComponent();
}
无效更新()
{
if(Input.GetKeyUp(KeyCode.Space))
{
myLight.enabled=!myLight.enabled;
}
}
}