如何在 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# 中使用统一组合网格并获取相对于主父级的点击位置的主要内容,如果未能解决你的问题,请参考以下文章