繁体   English   中英

c# - 如何在c#中使用unity组合网格并获取相对于主父级的单击位置

[英]how to combine meshes and get click location with respect to main parent in c# using unity

假设我在 Unity 中有一个 3D 塔。 塔的结构使得 Transform 父级有子级,其中每个子级代表塔的一层。 孩子本身是一个空的游戏对象(只有组件是一个变换),并且它们是许多(自定义)网格的父级(每个孙子都是一个单独的自定义网格)。 我如何组合这些网格,以便我可以点击塔楼地板上的某个地方,然后获得该点击相对于塔楼作为塔楼整体/局部位置的坐标?

我会在根上有一个专门的类

public class Tower : MonoBehaviour { }

那么你可以在所有孩子MeshCollider都有一个MeshCollider (或任何Collider但当然你会得到碰撞器上的位置而不是显示的网格)并且做

// Get a ray of your click position
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
// Shoot a raycast
if(Physics.Raycast(ray, out var hit))
{
    // Try to get the Tower component of the parent
    // bubbles up until it finds according component or returns null
    var tower = hit.gameObject.GetComponentInParent<Tower>();
    // Are we clicking at any child under a Tower component?
    if(tower)
    {
        // get the hit point in world space
        var worldPoint = hit.point;
        // Get the hit point relative to the tower's pivot
        var relativePoint = tower.transform.InverseTransformPoint(worldPoint);

        Debug.Log($"You have hit tower at {relativePoint.ToString("G9")}");     
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM