[英]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.