我有以下代码,它试图将一个gameObject放在场景视图上鼠标左键单击的位置。代码片段来自自定义编辑器窗口。我不明白为什么当我点击的时候,游戏对象会被实例化到我点击的地方的左边和上方。
void CustomUpdate(UnityEditor.SceneView sv)
{
Event e = Event.current;
if ((e.type == EventType.MouseDrag || e.type == EventType.MouseDown) && e.button == 0)
{
if (PlaceObject)
{
RaycastHit hit;
Tools.current = Tool.Move;
if (Physics.Raycast(Camera.current.ScreenPointToRay(new Vector3(e.mousePosition.x, Camera.current.pixelHeight - e.mousePosition.y, 0)),
out hit, Mathf.Infinity, ~LayerMask.NameToLayer("Terrain")))
{
GameObject tee = AssetDatabase.LoadAssetAtPath("Assets/FSX Course Importer/Default Objects/Markers/TeeMarker/TeeMarker.prefab", typeof(GameObject)) as GameObject;
GameObject go = Instantiate(tee) as GameObject;
go.transform.position = hit.point;
go.transform.SetParent(TeeParent);
go.name = "Hole:" + HoleNumber + " Type:" + TeeType;
e.Use();
Undo.RegisterCreatedObjectUndo(go, "Undo placed Tee");
}
EditorWindow.GetWindow(typeof(CreateTeeWindow)).Close();
}
}
}发布于 2020-07-29 19:18:23
您必须将Physics.Raycast(Camera.current.ScreenPointToRay(new Vector3(e.mousePosition.x, Camera.current.pixelHeight - e.mousePosition.y, 0)替换为
Physics.Raycast(Camera.current.ScreenPointToRay(Input.mousePosition))而Unity会照顾所有的黑客帝国
发布于 2020-07-29 21:36:53
如果任何人在内部和编辑器窗口脚本中工作时遇到类似问题,以下是更新后的代码
Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Mathf.Infinity, ~LayerMask.NameToLayer("Terrain")))
{
//code to place object at hit.point goes here
}https://stackoverflow.com/questions/63150676
复制相似问题