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

Posted

技术标签:

【中文标题】如何在 c# 中使用统一组合网格并获取相对于主父级的点击位置【英文标题】:how to combine meshes and get click location with respect to main parent in c# using unity 【发布时间】:2021-07-30 17:26:57 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

public class Tower : MonoBehaviour  

那么你可以在所有孩子身上都有一个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")");     
    

Camera.main Camera.ScreenPointToRay Physics.Raycast GameObject.GetComponentInParent RaycastHit.point Transform.InverseTransformPoint

【讨论】:

以上是关于如何在 c# 中使用统一组合网格并获取相对于主父级的点击位置的主要内容,如果未能解决你的问题,请参考以下文章

C# CaliburnMicro:如何根据在数据网格中选择的项目自动在组合框中显示值?

获取对话框中视图相对于其父级的位置

网格计算, 云计算, 集群计算, 分布式计算, 超级计算

获取相对于其父级的对话框中的视图位置

如何使用引导网格映射图像数组?

jQuery获取元素相对于窗口的位置