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