簡體   English   中英

在Unity中獲取許多游戲對象之間的中心點

[英]Get the center point between many GameObjects in Unity

我創建了一個游戲,您可以在其中以相同的形式同時控制 X 個角色,並且他們可以隨時死亡。 我的問題是當我希望游戲相機包含所有這些游戲對象時。

我認為一個不錯的選擇是計算場景中游戲對象之間的中心點,並使相機在一定距離處跟隨該點。

我已經有了相機代碼,但我仍然需要知道如何獲得中心點或其他方式。 此外,相機不會線性地跟隨任何軸(X、Y、Z),因為它的放置方式是視圖是等距的(游戲是 3D 的)。

最后一個重要的事實是,游戲中運行的所有游戲對象(活着的)都存儲在public static List <GameObject> ,以便能夠隨時訪問這些游戲對象的組件。 此外,如果角色(游戲對象)死亡或出生,則列表會毫無問題地更新。

我給你留下了一個帶有三種不同情況的圖形示例,分別是黑點、場景中的角色(游戲對象)和紅點、我想找到的中心點(矢量)。

在此處輸入圖片說明

另外,我留下了相機代碼,以便您可以測試是否有任何解決方案:

public class Camera_Movement : MonoBehaviour {

    Vector3 newPos;
    public static List<GameObject> playersInGame = new List<GameObject>();

    void Update() {

        // Get Central Vector

        // Replace playersInGame[0].transform.position with central vector
        //newPos = Vector3.Lerp(gameObject.transform.position, "central vector", Time.deltaTime);

        newPos = Vector3.Lerp(gameObject.transform.position, playersInGame[0].transform.position, Time.deltaTime);
        gameObject.transform.position = new Vector3(newPos.x, newPos.y, newPos.z);

    }
}

非常感謝您提前!

您需要取平均值 x 和平均值 y。

如下所示:

var totalX = 0f;
var totalY = 0f;
foreach(var player in playersInGame)
{
     totalX += player.transform.position.x;
     totalY += player.transform.position.y;
}
var centerX = totalX / playersInGame.Count;
var centerY = totalY / playersInGame.Count;

讓我知道這是否適合您(目前無法訪問 Unity),但我在這里整理了一個示例: https : //dotnetfiddle.net/jGd99I

如果您想要一個解決方案,讓您的相機可以最佳定位以查看所有對象,請嘗試此操作

public Vector3 FindCenterOfTransforms(List<Transform> transforms)
{
    var bound = new Bounds(transforms[0].position, Vector3.zero;
    for(int i = 1; I < transforms.length; i++)
    {
        bound.Encapsulate(transforms[i].position);
    }
    return bound.center;
}

暫無
暫無

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

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