Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过鼠标拖动,在其自身的X轴上来回移动对象_C#_Unity3d - Fatal编程技术网

C# 通过鼠标拖动,在其自身的X轴上来回移动对象

C# 通过鼠标拖动,在其自身的X轴上来回移动对象,c#,unity3d,C#,Unity3d,我想: 使用鼠标在其自身的X轴上来回移动特定对象 夹住盒子之间的空隙 我尝试过但不适用于我的代码: void Update() { point = Camera.main.ScreenToWorldPoint( new Vector3(Input.mousePosition.x, (transform.position.y-Camera.main.transform.position.y), (transform.p

我想:

  • 使用鼠标在其自身的X轴上来回移动特定对象
  • 夹住盒子之间的空隙
  • 我尝试过但不适用于我的代码:

        void Update()
        {
        point = Camera.main.ScreenToWorldPoint(
        new Vector3(Input.mousePosition.x,
                (transform.position.y-Camera.main.transform.position.y),
                (transform.position.z-Camera.main.transform.position.z)));
    
        point.y = transform.position.y;                   
        point.z = transform.position.z;
        transform.position = point;
      }
    

    要钳制值,可以使用
    Mathf.clamp()
    方法

    完整的解决方案可能如下所示:

    将脚本添加到杠杆对象:

    using UnityEngine;
    using UnityEngine.EventSystems;
    
    public class MoveOnMouseDrag : MonoBehaviour {
    
        public float halfDistance;
    
        void Start()
        {
            EventTrigger trigger = GetComponent<EventTrigger>();
            EventTrigger.Entry entry = new EventTrigger.Entry();
            entry.eventID = EventTriggerType.Drag;
            entry.callback.AddListener((data) => { OnDragDelegate((PointerEventData)data); });
            trigger.triggers.Add(entry);
        }
    
        public void OnDragDelegate(PointerEventData data)
        {
            float distanceFromCamera = Vector3.Distance(Camera.main.transform.position, transform.position);
            var newPos = Camera.main.ScreenToWorldPoint(new Vector3(data.position.x, data.position.y, distanceFromCamera));
    
            transform.position = new Vector3(Mathf.Clamp(newPos.x, -halfDistance, halfDistance),
                                             transform.position.y,
                                             transform.position.z);
        }
    }
    
    使用UnityEngine;
    使用UnityEngine.EventSystems;
    公共类MoveOnMouseDrag:MonoBehavior{
    公众浮标半程;
    void Start()
    {
    EventTrigger=GetComponent();
    EventTrigger.Entry=新的EventTrigger.Entry();
    entry.eventID=EventTriggerType.Drag;
    entry.callback.AddListener((数据)=>{OnDragDelegate((PointerEventData)数据);});
    trigger.triggers.Add(条目);
    }
    公共void OnDragDelegate(PointerEventData数据)
    {
    float Distance fromCamera=Vector3.距离(Camera.main.transform.position,transform.position);
    var newPos=Camera.main.ScreenToWorldPoint(新矢量3(data.position.x,data.position.y,distanceFromCamera));
    transform.position=新矢量3(数学夹具(新位置x,-半距离,半距离),
    变换.position.y,
    变换位置(z);
    }
    }
    

    为了使脚本正常工作,您必须将
    EventTrigger
    组件添加到同一对象,将
    EventSystem
    添加到场景,将
    PhysicsRaycaster
    组件添加到相机

    用什么语言和平台?请贴上合适的标签到目前为止你试过什么吗?请出示您的密码!StackOverflow不是一个
    请为我编码的平台,而是一个为特定编程问题提供帮助的社区。请查看,当您遇到与编码相关的特定问题时,我们很乐意提供帮助。