我製作了一個森林場景,基本上它充滿了樹木(樹木密度=最大),但樹木可以輕鬆地穿過。所以我在每棵樹上添加了網狀碰撞器,當我按下播放按鈕時,遊戲變得非常緩慢,以至於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;
}
}
}