我制作了一个森林场景,基本上它充满了树木(树木密度=最大),但树木可以轻松地穿过。所以我在每棵树上添加了网状碰撞器,当我按下播放按钮时,游戏变得非常缓慢,以至于fps小于10.当玩家靠近树木和远离树木时启用和禁用树木网格物体碰撞器
Unity有没有办法禁用10个单位的树木网格碰撞器(半径一个半球)远离玩家,并在玩家靠近它时启用它?
C#
和UnityScript
在需要编写脚本时可以接受。
我制作了一个森林场景,基本上它充满了树木(树木密度=最大),但树木可以轻松地穿过。所以我在每棵树上添加了网状碰撞器,当我按下播放按钮时,游戏变得非常缓慢,以至于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
}
我相信它会比对撞机更快。
是的,你可以做到这一点,首先你必须找到你的玩家和树木之间的距离vector3.distance检查unity3.distance的统一文档,当你的玩家更接近树,然后你通过gameobject.find找到你的树,启用和禁用您的游戏对象,例如:
public class EnableComponents : MonoBehaviour
{
private Light myLight;
void Start()
{
myLight = GetComponent<Light>();
}
void Update()
{
if(Input.GetKeyUp(KeyCode.Space))
{
myLight.enabled = !myLight.enabled;
}
}
}