为了账号安全,请及时绑定邮箱和手机立即绑定

Unity-Camera ScreenToWorldPoint返回奇数值

Unity-Camera ScreenToWorldPoint返回奇数值

C#
梵蒂冈之花 2021-05-13 17:54:51
主相机的输出设置为渲染纹理,该纹理应用于材质,该材质应用于缩放至128x72的四边形。辅助摄像机设置为仅查看渲染到子四边形上的对象,该子四边形上具有带有渲染纹理的材质。但是Camera.main.ScreenToWorldPoint(Input.mousePosition)返回的值甚至不接近GameObject。IE的GameObject实例化为(0, 0, 0),将鼠标悬停在上时显示的鼠标为(307, 174)。将Rotating Object移至屏幕的右边缘将仅返回x位置64(宽为128px的四边形的一半),因此我不确定300+来自何处。不知道四极/相机设置是否对此负责。编辑:使用单个正交相机,除了使用渲染纹理外,所有属性都相同,而不是我现在得到的设置是准确的ScreenToWorldPoint输出。
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

您可能未Camera.ScreenToWorldPoint正确调用该方法。特别是,应将传递给此方法的屏幕位置参数的z位置定义为相机的世界单位。请参阅Camera.ScreenToWorldPoint上的Unity文档。


相反Camera.main.ScreenToWorldPoint(Input.mousePosition),我认为这是正确的调用方式Camera.ScreenToWorldPoint:


var cameraPosition = Camera.main.transform.position;


// assuming `transform` is the transform "Virtual Screen Quad"...

float zWorldDistanceFromCamera = transform.position.z - cameraPosition.z;


var screenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, zWorldDistanceFromCamera);

var worldPoint = Camera.main.ScreenToWorldPoint(screenPoint);


Debug.LogFormat("mousePosition: {0} | zWorldDistanceFromCamera: {1} | worldPoint: {2}",

                Input.mousePosition,

                zWorldDistanceFromCamera,

                worldPoint.ToString("F3"));

(如果这行不通,您是否可以更新您的问题?)


查看完整回答
反对 回复 2021-05-23
  • 3 回答
  • 0 关注
  • 400 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信