如何在Unity3d中击中对象之前稍微结束光线投射?



我正在制作一个块构建系统,有时当我放置它们时,块会偏移甚至夹在彼此内部。我使用光线投射到我看到的地方,我想让光线投射在击中块之前稍微结束,以防止块合并和偏移。我所构建的块也被编码为被截取到一个网格。

光线投射块放置代码:

if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//Make Whatever a Raycast layer or if you don't want it just exclude it
if (Physics.Raycast(ray, out hit, Whatever.value))
{
Point = hit.point;
Instantiate(stoneBricks, Point, UnityEngine.Quaternion.identity);
}
}

块网格快照代码:

Vector3 b = new Vector3(Mathf.Floor(a.x + 0.0f), Mathf.Floor(a.y + 0.0f), Mathf.Floor(a.z - 0.0f));

您可能正在寻找Physics.ComputePenetartion

计算在指定姿势分离给定碰撞器所需的最小平移

所以你可以这样做,例如

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, Whatever.value))
{
Point = hit.point;
// store your new bricks reference
var newBrick = Instantiate(stoneBricks, Point, UnityEngine.Quaternion.identity);
// Now check if there is an overlap
if(Physics.ComputePenetartion(newBrick.GetComponent<Collider>(), newBrick.transfom.position, newBrick.transform.rotation, hit.collider, hit.transform.position, hit.transform.rotation, out var direction, out var distance))
{
// If so move the new brick just far enough away so there is no overlapping anymore
newBrick.position += direction * distance;
}
}

我试着增加偏移量,或者试着增加一点碰撞器的尺寸(非常小的一点)。

最新更新