我有两台相机,
为什么我有两台相机?
因为我想在Canvas前面放一些游戏对象以便它可以移动,如果它感觉很开心可能会有一些粒子等等。所以:
我设置了带有遮罩选项UI的主摄像头并让它负责所有UI内容,并确保它不会重叠我设置画布模式的所有内容"屏幕空间摄像头&# 34;
我设置了另一台相机并将其捕获除了UI之外的所有其他内容。
设置深度,以便带有UI的主摄像头位于另一个摄像头后面。
但在某些情况下,我将UI元素转换为世界空间中的点,这样我就可以在UI元素附近生成一些gameObject,也可以将它移动到另一个UI元素,让我们来看看以收集宝石为例。
通常,我可以使用以下代码执行此操作:
GameObject go = Instantiate(eff_gem);
go.transform.position = Camera.main.ScreenToWorldPoint(p1.GetComponent<RectTransform>().position);
go.transform.DoMove(p2.GetComponent<RectTransform>().position, 1f).OnComplete(()=>{
Destory(go, 1f);
});
主要思想是在按钮附近实例化一个宝石并让它飞到计数面板。
但是因为我制作了画布&#34;屏幕空间相机&#34;而不是&#34;屏幕空间覆盖&#34;,以上所有代码都将是一团糟。此外,我想我必须将画布元素的屏幕点转换为另一个相机的世界空间,但我甚至无法通过
获得画布元素的实际像素位置 现在 p1.GetComponent<RectTransform>().position
。
那我该怎么做?
我已经demo project来证明这个问题。
答案 0 :(得分:1)
var p1R = p1.GetComponent<RectTransform>();
Vector3 p1WorldPos = p1R.TransformPoint(p1R.rect.center);
//use p1WorldPos in your other camera