首页 > 解决方案 > Physics.CheckSphere(和类似的)并不总是有效

问题描述

我正在生成球体并希望它们不相交。该脚本大部分都有效,但我总是得到一些相交的球体 - 彼此靠近的一对或三个。

我已经尝试了所有的方法 - CheckSphere, ,以及和OverlapSphere的相同方法,尝试使用另一个球体随机化 ontriggerenter 的位置 - 没有任何帮助。boxmesh

void CreateObject(Vector3 v)
{
    _myObj = Instantiate(ballPrefab, _cloneParent);
    _myObj.transform.localPosition = v;
    _myObj.GetComponent<MeshRenderer>().enabled = false;
    SpawnedObjects.Append(_myObj);
}

SpawnedObjects = new GameObject[_amountRandomized];

_cloneParent = GameObject.FindGameObjectWithTag("SurfaceFlag").transform;
const float objectSize = 105f;
for (var i = 0; i < _amountRandomized; i++)
{
    var randomizedPos = new Vector3(Random.Range(-DistanceFromCenter, DistanceFromCenter), SpawnDepth, Random.Range(-DistanceFromCenter, DistanceFromCenter));
    while (Physics.CheckSphere(_cloneParent.transform.TransformPoint(randomizedPos), objectSize, 10))
    {
        Debug.Log(Physics.CheckSphere(_cloneParent.transform.TransformPoint(randomizedPos), objectSize, 10));
        randomizedPos = new Vector3(Random.Range(-DistanceFromCenter, DistanceFromCenter), SpawnDepth, Random.Range(-DistanceFromCenter, DistanceFromCenter));
    }

    CreateObject(randomizedPos);
}

private void OnTriggerEnter(Collider col)
{
    if (col.gameObject.CompareTag("Collectible"))
    {
        Debug.Log("Moving sphere");
        _transform.position = new Vector3(Random.Range(-_distanceFromCenter, _distanceFromCenter), Gameplay.SpawnDepth, Random.Range(-_distanceFromCenter, _distanceFromCenter));
    }
    _goDown = false; //trigger to move 6f downwards with Lerp
    _goUp = true; //same but upwards
    _startTime = Time.time;
}

没有收到任何错误消息。

标签: c#unity3d

解决方案


推荐阅读