unity3d 鼠标延各个方向拖拽物体

using UnityEngine;
using System.Collections;

//选择轴向
public enum directionEnum{

    x_dir,
    y_dir,
    z_dir,
}
public class DragObject : MonoBehaviour {

    // Use this for initialization

    public directionEnum myDirection;
    public Transform target;//需要拖拽的目标
    public bool isDrag;//表示当前是否可拖动
    public float MinDistance;
    public float MaxDistance;
    private Vector3 mousePos;
    /// </summary>
    void Start () {

        //下面是我用NGUI的事件添加的,也可以使用UGUI或者射线检测
        //UIEventListener.Get (this.gameObject).onDrag = DragTarget;
        //UIEventListener.Get (this.gameObject).onDragEnd = EndDrag;

    }

    // Update is called once per frame
    void Update () {

    }
    public void SetTarget(Transform go)
    {
        this.target = go;
        mousePos = Input.mousePosition;//初始化鼠标初始位置,或者放到Start函数里
    }

    public void DragTarget()
    {
        if (isDrag) {
            Vector3 ScreenSpace = Camera.main.WorldToScreenPoint(target.position); //目标世界坐标转屏幕,获取z值
            Vector3 curScreenSpace = new Vector3(Input.mousePosition.x,Input.mousePosition.y,ScreenSpace.z);//当前鼠标位置转世界
            Vector3 offset = target.position - Camera.main.ScreenToWorldPoint (new Vector3 (mousePos.x, mousePos.y, ScreenSpace.z));//鼠标上一帧的世界位置和目标点的位置差
            Vector3 CurPosition = Camera.main.ScreenToWorldPoint(curScreenSpace)+offset;//鼠标当前位置+位置差

            switch (myDirection) {
                case directionEnum.x_dir:

                    target.position = new Vector3 (Mathf.Clamp( CurPosition.x,MinDistance,MaxDistance), target.position.y, target.position.z); 

                    break;
                case directionEnum.y_dir:
                    target.position = new Vector3 (target.position.x,Mathf.Clamp( CurPosition.y,MinDistance,MaxDistance), target.position.z);
                    break;
                case directionEnum.z_dir:
                    target.position = new Vector3 ( target.position.x, target.position.y, Mathf.Clamp( CurPosition.z,MinDistance,MaxDistance));
                    break;
                default:
                    break;
            }

            mousePos = Input.mousePosition;
        }

    }

}

如果有不对,或者更好的方法,大家多多指教

时间: 2024-10-07 06:03:41

unity3d 鼠标延各个方向拖拽物体的相关文章

unity 鼠标拖拽物体实现任意角度自旋转

主要涉及函数 Input.GetAxis(“Mouse x”) 可取得鼠标横向(x轴)移动增量 Input.GetAxis(“Mouse y”) 可取得鼠标竖向(y轴)移动增量 通过勾股定理获取拖拽长度,长度越长旋转越快 在project setting--Input 可以设置 直接上代码,看了就明白了 1 using UnityEngine; 2 using System.Collections; 3 4 public class startRoate : MonoBehaviour 5 {

射线碰撞【拖拽物体img,点击后在固定位置显示A(工具),点击A显示B(Toggle组成的表),关闭B显示C(工具)】

[添加脚本(Move)] //该脚本挂在img的父物体上 using UnityEngine;using System.Collections;using UnityEngine.UI; //定义枚举 public enum Tools{ 空, 塞尺} public class Move : MonoBehaviour {  //放置img的父物体(窗体,如上图所示) public GameObject LittleWin1; public GameObject Tog1; //给窗体设置一个初

多方向拖拽改变元素大小

拖拽:1 onmousedown 存距离 disX/Y2 onmousemove 修改left top3 onmouseup 释放资源 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style> 7 #box{ 8 width: 100px; 9

Js使用面向对象和面向过程的方法实现拖拽物体的效果

1.面向过程的拖拽实现代码: <!DOCTYPE html> <html> <head> <title>drag Div</title> <style type="text/css"> #div1{width: 100px;height: 100px;background: red;position: absolute;} </style> <script type="text/java

JS拖拽

拖拽原理    a, 被拖拽物体绝对定位    b, 按下时记录鼠标在拖拽物体上的位置,拖拽时鼠标在拖拽物体上的位置保持不变    c, 鼠标移动时改变拖拽物体位置 1,简易拖拽 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>拖拽原型</title> <script type="text/javascript" sr

简单的鼠标拖拽效果(原生js实现)

之前在聊天群里看到有人说面试的时候被问到了怎样实现一个拖拽效果,当时看到后在心里默默思考了下,结果发现好像我也写不出来啊.本着遇到一个解决一个的思想,就亲自敲了一个,看到张鑫旭大神写的代码,真的很厉害,多多学习了,(感觉随便搜一个关于前端方面的问题都能看到他的网站,真是太佩服了,写了那么多文章,十分感谢.)好了,接下来就进入正题了.想实现一个效果首先得明白其中的逻辑,知道了实现逻辑后,就可以码代码了.首先我实现的效果是: 鼠标按下后,才可以执行后续效果 鼠标已经按下,然后鼠标移动,需要拖拽的元素

HTML5 鼠标拖拽以及web存储

html5 拖拽: (function(){}())执行匿名函数,要用括号包括起来: 1:用鼠标事件来做拖拽: 2:在HTML5中加入draggable="true",就可以拖拽但是是分成了两个,这个更有效率: ondragstart:拖拽开始: ondrag:拖拽中 ondragend:拖拽结束: ondragenter:进入投放去: ondragover:投放区移动: ondragleave:离开投放区: ondrop:投放区投放:           ondragover会阻止d

js实现鼠标拖拽div-------Day44

如果去问这样一个问题"你觉得鼠标操作简单,还是键盘操作简单",相信会有多数人都会回答鼠标吧,毕竟键盘按钮那么多,如果手小了或者手法不规范了,太容易出问题了,也对操作的速度和有效性是大大的降低了,当然不可否认,会有那么一批人,操作起键盘来完全可以忽略鼠标的,但这些都应该是骨灰级别的了吧,起码我现在的层次还接触不到,只能向往. 然而,当面对这么一个问题时,我突然有点纠结,因为毕竟以前我也是那么想的,但是这次开发让我是大跌眼镜,键盘操作我在开发中,我只能判定其按键是否按键,然后根据不同按键进

Qt窗口添加鼠标移动拖拽事件

1. .h文件中添加 private:    QPoint dragPosition; 2. 在cpp文件中重写鼠标点击和拖拽函数 void ShapeWidget::mousePressEvent(QMouseEvent * event){    if (event->button() == Qt::LeftButton) //点击左边鼠标    {         dragPosition = event->globalPos() - frameGeometry().topLeft();