簡體   English   中英

如何在Unity3D中處理沙子

[英]How to handle sand in unity3d

我有Crane動畫,它將(通過其顎部)拾取沙子並將其放到卡車上。 我試圖找到在Unity中處理沙子的方法,但不幸的是沒有發現任何東西。 因此,我在max中制作了自定義砂對象(低聚),並將其帶入Unity3d並對其應用了盒碰撞器和剛體。 但是當我玩游戲時,我的FPS下降並且玩家幾乎不動。 Profiler告訴我們,物理學是如此沉重(應該是碰撞體過多而剛性體過多)。 我試圖通過碰撞矩陣和碰撞層來優化物理特性,但是並沒有提高性能。

這是處理起重機與沙子相互作用的正確方法嗎?

您可以將沙子用作地形,然后使用terrain.SetHeights()方法降低使用起重機的地形的特定區域。

降低或升高地形時,看起來就像那些經典的地形編輯工具。

然后,無論您在何處“掉落”,都可以稍微高一點。

我發現此線程帶有一些代碼示例來幫助您入門: https : //forum.unity.com/threads/edit-terrain-in-real-time.98410/

private void raiseTerrain(Vector3 point)
{
    int terX =(int)((point.x / myTerrain.terrainData.size.x) * xResolution);
    int terZ =(int)((point.z / myTerrain.terrainData.size.z) * zResolution);
    float[,] height = myTerrain.terrainData.GetHeights(terX - 4,terZ - 4,9,9);  //new float[1,1];

    for(int tempY = 0; tempY < 9; tempY++)
        for(int tempX = 0; tempX < 9; tempX++)
        {
            float dist_to_target = Mathf.Abs((float)tempY - 4f) + Mathf.Abs ((float)tempX - 4f);
            float maxDist = 8f;
            float proportion = dist_to_target / maxDist;

            height[tempX,tempY] += 0.001f * (1f - proportion);
            heights[terX - 4 + tempX,terZ - 4 + tempY] += 0.01f * (1f - proportion);
        }

    myTerrain.terrainData.SetHeights(terX - 4, terZ - 4, height);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM