unity中 拖拽随意的对象

孙广东   2015.8.16

目的 :  我们能简单的通过 鼠标位置 得到目标对象  假设没有使用刚体组件

Step - 1: 在3D项目中设置场景.  一个空对象命名为: DragAndDrop   ,和创建一些其它的游戏对象 如 sphere, cube 等

- 感觉例如以下l;

Step - 2: C# 脚本命名为  "GameobjectDragAndDrop".

Step - 3: 加入方法:

GameObject ReturnClickedObject(out RaycastHit hit)
    {
        GameObject target = null;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray.origin, ray.direction * 10, out hit))
        {
            target = hit.collider.gameObject;
}
        return target;
    }

Step - 4: 在Update 方法中

void Update()
    {

        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit hitInfo;
            target = ReturnClickedObject(out hitInfo);
            if (target != null)
            {
                isMouseDrag = true;
                Debug.Log("target position :" + target.transform.position);
                //Convert world position to screen position.
                screenPosition = Camera.main.WorldToScreenPoint(target.transform.position);
offset = target.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z));
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            isMouseDrag = false;
        }

        if (isMouseDrag)
        {
            //track mouse position.
            Vector3 currentScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);

            //convert screen position to world position with offset changes.
            Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenSpace) + offset;

            //It will update target gameobject‘s current postion.
            target.transform.position = currentPosition;
        }

    }

Step - 6: 执行程序,然后拖拽对象就OK了啊。。

时间: 2024-08-02 06:01:14

unity中 拖拽随意的对象的相关文章

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 {

H5 拖拽,直接指对象设置可拖拽

页面上, 弹个小窗体, 又不想 加载一堆js, 有想简单的就能让他可以拖动?   嗯,下面有这样一个函数,调用下就好了! 1. 先来说说 H5的 拖拽 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 设置元素为可拖放 首先,为了使元素可拖动,把 draggable 属性设置为 true : <img draggable="true" /> 拖动什么 - ondragstart 和 setData() 然后,规定当元素被拖动时,会发生什么. 在上面的例子中,on

Unity的拖拽代码

using UnityEngine; using System.Collections; public class MyDragDropItem :UIDragDropItem{ protected override void OnDragDropRelease(GameObject surface){ base.OnDragDropRelease(surface); //进行我们的处理代码了 print(surface); } }

Unity 鼠标拖拽旋转物体

using UnityEngine; public class RotateObj : MonoBehaviour { public float OffsetX = 0; public float OffsetY = 0; public float speed = 6f;//旋转速度 void Update() { if (Input.GetMouseButton(0)) { OffsetX = Input.GetAxis("Mouse X");//获取鼠标x轴的偏移量 OffsetY

HTML5拖拽——将本地文件拖拽到网页中显示

HTML5标准中的提供的用于文件输入输出(I/O)的对象 File: 代表一个文件对象 FileList: 代表一个文件列表,类数组对象 FileReader 用于从文件中提取内容 FileWrite 用于向文件中写入类容 这些对象需要在 H5的拖拽事件中通过 e.dataTransfer 来访问和获取 完成效果如下: Data URL给了我们一种很巧妙的将图片"嵌入"到HTML中的方法.跟传统的用img标记将服务器上的图片引用到页面中的方式不一样,在Data URL协议中,图片被转换

WPF中元素拖拽的两个实例

原文:WPF中元素拖拽的两个实例 今天结合之前做过的一些拖拽的例子来对这个方面进行一些总结,这里主要用两个例子来说明在WPF中如何使用拖拽进行操作,元素拖拽是一个常见的操作,第一个拖拽的例子是将ListBox中的子元素拖拽到ListView的某一个节点,从而将该子元素作为当前节点的子节点.第二个例子就是将ListView的某一项拖拽到另外一项上从而使两个子项位置互换,这两个例子的原理类似,实现细节上有所差别,下面就具体分析一下这些细节. DEMO1 一 示例截图 图一 示例一截图 二 重点原理分

C#中实现控件拖拽效果(How to DragDrop Control in C#)

当产品间需要交互实现数据传递,或产品需要从外部导入文件时,通过控件拖拽来实现是个不错的选择.在UI上支持控件拖拽,可极大提升用户体验.拖拽本身并不神秘,它的本质实际是一个数据交换的过程.控件接受从其他地方来的数据,并进行处理.数据交换有多种方法,Windows中剪贴板可能就是用的最多,但最不被注意的一种方法.下面介绍用C#实现控件拖拽,并通过剪切板交换数据. 对于拖拽的对象,需要在MouseDown或ItemDrag中调用DoDragDrop,传递要拖拽的数据对象并触发拖拽.总的来说,当用户调用

在Unity中定义统一的对象搜索接口

我们经常要在Unity中以各种方式搜索对象.比如按名字搜索.按tag.layer或者是查找名字为xxx开头的对象. 本文是介绍以一种统一的接口来搜索对象. 1.定义统一的搜索接口 /// <summary> /// 游戏对象搜索接口 /// </summary> public interface IGameObjectFinder { /// <summary> /// 搜索 /// </summary> /// <param name="r

利用jQuery UI为CMS网站实现拖拽布局效果,秒杀table布局

1 实现效果 对于使用过CMS系统制作网站的人应该都清楚,制作网站过程有一个重要的步骤就是制作页面布局.目前,实现页面布局有两种方式:table与div.这两种方式各有其优劣之处. Table: 优势:使用简单,使用表格进行布局顺理成章,概念和效果图理解起来很简单,制作也方便. 劣势:表格布局比较固定,布局效果控制的比较死,一些较为特殊的效果.层叠效果等比较难以实现. Div: 优势:布局效果灵活,div能轻易的控制布局位置,浮动效果等. 劣势:操作较为复杂,需要前端布局设计人员对div的特性.