Spasibo Asked:2020-12-02 21:04:35 +0000 UTC2020-12-02 21:04:35 +0000 UTC 2020-12-02 21:04:35 +0000 UTC 统一二维。用光标移动对象 772 我想知道如何将对象移动到光标后面(当鼠标按下对象时)。不仅如此,我还需要确保只能拖动某个项目,如何做一个检查这个的条件,以及一般如何编写 OnMouseDown 方法?提前致谢。 unity3d 3 个回答 Voted Andrey 2020-12-03T01:51:45Z2020-12-03T01:51:45Z 首先,如何定义某种对象。在这里,您应该阅读如何投射光线。这是从鼠标位置抛出的光束的示例。 If(Input.GetMouseButtonDown(0)) 从方法的名称可以清楚地看出它负责点击鼠标按钮。参数中的索引负责哪个按钮: 0 鼠标左键 1 个鼠标右键 2 像轮子 要投射光线,您需要声明一个光线变量。 Ray ray; 现在我们将屏幕点转换为射线。 ray = Camera.main.ScreenPointToRay(Input.mousePosition)); 现在你需要射线相交的结果。 RaycastHit hit; 现在我们启动上面创建的梁。 If(Physics.Raycast(ray,out hit)) 如果更好的被抛出,那么这个条件将起作用。然后变量hit存储与某物碰撞的数据。例如,您可以获得与之相交的对象。 hit.collider.gameObject 你可以用它做任何你想做的事情。由于要使用鼠标拖动对象,因此需要将上述所有代码置于一个条件中: if(Input.GetMouseButton(0)) 这个条件负责按下鼠标按钮这一事实。我们还抛出一条射线来确定我们正在移动同一个物体。嗯,随意混合。可以通过减少附加条件的光线数量来优化它。行动的范围是巨大的。但本质是一样的。 Best Answer JediMan4ik 2020-12-03T02:57:52Z2020-12-03T02:57:52Z 如果您使用的是 2d 空间(2d 游戏或画布),则有接口IBeginDragHandler、IDragHandler、IEndDragHandler 我会告诉你,该方法中OnDrag(EventData eventData)有一个变量eventData,使用它你可以移动光束落在其上的对象(这里你不需要自己拍摄光束)。 为了移动鼠标光标后面的对象,您需要编写 eventData.pointerCurrentRaycast.gameObject.transform.position = Input.mousePosition; Andrew_STOP_RU_AGRESSION_IN_UA 2020-12-03T20:18:32Z2020-12-03T20:18:32Z using UnityEngine; using System.Collections; public class DragDrop : MonoBehaviour { private Vector3 offset; void OnMouseDown() { offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f)); } void OnMouseDrag() { Vector3 newPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f); transform.position = Camera.main.ScreenToWorldPoint(newPosition) + offset; } } 只需将脚本挂在对象上即可。答案取自这里:https ://stackoverflow.com/a/38407823/4423545
首先,如何定义某种对象。在这里,您应该阅读如何投射光线。这是从鼠标位置抛出的光束的示例。
If(Input.GetMouseButtonDown(0))从方法的名称可以清楚地看出它负责点击鼠标按钮。参数中的索引负责哪个按钮:
要投射光线,您需要声明一个光线变量。
Ray ray;现在我们将屏幕点转换为射线。
ray = Camera.main.ScreenPointToRay(Input.mousePosition));现在你需要射线相交的结果。
RaycastHit hit;现在我们启动上面创建的梁。
If(Physics.Raycast(ray,out hit))如果更好的被抛出,那么这个条件将起作用。然后变量
hit存储与某物碰撞的数据。例如,您可以获得与之相交的对象。hit.collider.gameObject你可以用它做任何你想做的事情。由于要使用鼠标拖动对象,因此需要将上述所有代码置于一个条件中:
if(Input.GetMouseButton(0))这个条件负责按下鼠标按钮这一事实。我们还抛出一条射线来确定我们正在移动同一个物体。嗯,随意混合。可以通过减少附加条件的光线数量来优化它。行动的范围是巨大的。但本质是一样的。
如果您使用的是 2d 空间(2d 游戏或画布),则有接口IBeginDragHandler、IDragHandler、IEndDragHandler
我会告诉你,该方法中
OnDrag(EventData eventData)有一个变量eventData,使用它你可以移动光束落在其上的对象(这里你不需要自己拍摄光束)。为了移动鼠标光标后面的对象,您需要编写
eventData.pointerCurrentRaycast.gameObject.transform.position = Input.mousePosition;只需将脚本挂在对象上即可。答案取自这里:https ://stackoverflow.com/a/38407823/4423545