3D物体的拖拽不同于2D的。因为3D物体有x,y,z当然。实际拖拽还是在XZ平面。只是多了几个转换

 using UnityEngine;
using System.Collections; public class tuotuo : MonoBehaviour
{ Vector3 currPosition; //拖拽前的位置
Vector3 newPosition; //拖拽后的位置 // Use this for initialization
void Start()
{ } // Update is called once per frame
void Update()
{ } /// <summary>
/// 开始拖拽 3D物体 拖拽是在平面拖拽 即 xy平面
/// </summary>
void OnMouseDrag()
{
//1:把物体的世界坐标转为屏幕坐标 (依然会保留z坐标)
currPosition = Camera.main.WorldToScreenPoint(transform.position); //2:更新物体屏幕坐标系的x,y
currPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, currPosition.z); //3:把屏幕坐标转为世界坐标
newPosition = Camera.main.ScreenToWorldPoint(currPosition); //4:更新物体的世界坐标
transform.position = newPosition;
}
}
 OnMouseDrag只是MonoBehaviour的一个方法。如果想拖拽UGUI界面是不行的。必须继承接口
using UnityEngine;
using System.Collections;
using DG.Tweening;
using UnityEngine.UI;
using System.Collections.Generic;
using UnityEngine.EventSystems;
public class newButton : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{ //自己的RectTransform
RectTransform rf;
//Vector3 oldPosition;//原来的位置,拖拽前的位置
Vector3 newPosition;//拖拽中的位置
bool isDrag; //是否开始拖拽
public void OnEndDrag(PointerEventData eventData)
{ } public void OnDrag(PointerEventData eventData)
{
if (isDrag) //必须要执行了OnBeginDrag才执行OnDrag 有时候会遇到不执行OnBeginDrag
{
// 通过屏幕中的鼠标点,获取在父节点中的鼠标点
RectTransformUtility.ScreenPointToWorldPointInRectangle(rf, eventData.position, eventData.enterEventCamera, out newPosition);
rf.position = newPosition; //设置拖动的图片的位置
//print(newPosition);
}
} public void OnBeginDrag(PointerEventData eventData)
{
isDrag = true;
}

在屏幕拖拽3D物体移动的更多相关文章

  1. jQuery可拖拽3D万花筒旋转特效

    这是一个使用了CSS3立体效果的强大特效,本特效使用jQuery跟CSS3 transform来实现在用户鼠标按下拖动时,环形图片墙可以跟随鼠标进行3D旋转动画. 效果体验:http://hovert ...

  2. dragView 屏幕拖拽并且弹出菜单的控件

    dragView 因项目新需求需要添加一个屏幕拖拽按钮可以弹出菜单的控件,因为不是我做的闲来无事写一个demo吧 可能存在一些小bug(毕竟就写了几个小时)兄弟姐妹们理解思路就行 具体的可以自己调试一 ...

  3. js拖拽3D立方体旋转

    这段时间有点闲,所以就自己找些小玩意来练习练习.今天做了一个可以拖拽页面内空白位置3D立方体就会跟着转动的小例子,布局方面用到css3 3D转换技术,通过transform控制旋转实现的. 上个图 代 ...

  4. Unity 实现物体拖拽

    Unity实现拖拽: 也可以继承Unity EventSystem中的接口实现. 当鼠标按下的时候以左键为例: Using System.Collections; Using System.Colle ...

  5. JS—实现拖拽

    JS中的拖拽示例:    1)实现拖拽思路:当鼠标按下和拖拽过程中,鼠标与拖拽物体之间的相对距离保持不变    2)实现拖拽遇到的问题:        问题1:当鼠标按下移动过快时,离开了拖拽的物体时 ...

  6. Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了解拖拽的原理

    今天我们来看看如何让拖拽的物体不能拖出某个div之外和拖拽的吸附功能 上次讲到我们的拖拽是不可拖出可视区范围的,在这基础上我们加个父级的div,不让他拖出父级.原理和之前的一样,简单吧. <di ...

  7. 原生js简单实现拖拽效果

    实现弹窗拖拽效果的原理是:按下鼠标并移动——拖拽移动物体,抬起鼠标——停止移动.主要触发三个事件:onmousedown.onmousemove以及onmouseup: 首先搭建结构:一个宽350px ...

  8. TriggerPrefab 拖拽物体

    模拟经营类游戏 有一个特点,就是 拖拽物体.常见的有<帝国><红警><部落战争><凯撒大帝>等等 2d 拖拽 大部分都是 用 OnDrag 方法来 拖动 ...

  9. 快速开发 HTML5 WebGL 的 3D 斜面拖拽生成模型

    前言 3D 场景中的面不只有水平面这一个,空间是由无数个面组成的,所以我们有可能会在任意一个面上放置物体,而空间中的面如何确定呢?我们知道,空间中的面可以由一个点和一条法线组成.这个 Demo 左侧为 ...

随机推荐

  1. [No0000D5]便利所有子目录更改后缀名bat

    pause for /r %%i in (.) do ( cd %%i ren *.txt *.dll ) pause

  2. C和C指针小记(五)-指针类型

    1.指针常量(pointer constant) 一般是没有这个概念的,指针类型的常量理解起来可以看着指针类型的常量,常用 0xff123456 表示,我们一般不会这么做.因为程序员一般无法事先知道计 ...

  3. FW--tomcat bi-laternal https and keytool

    说明:按照本文中以下内容配置https,猫server.xml中clientAuth=false,单向验证的时候,网页中可以访问:当clientAuth=true进行双向验证的时候,网页中不可以访问: ...

  4. Chap2:什么是shell[The Linux Command Line]

    shell - a program that takes keyboard commands and passes them to the operating system to carry out ...

  5. [knowledge][lisp] lisp与AI

    https://blog.youxu.info/2009/08/31/lisp-and-ai-1/ https://blog.youxu.info/2010/02/10/lisp-and-ai-2/

  6. Apache Kafka - KIP-42: Add Producer and Consumer Interceptors

    kafka 0.10.0.0 released   Interceptors的概念应该来自flume 参考,http://blog.csdn.net/xiao_jun_0820/article/det ...

  7. <大话设计模式>工厂模式,策略模式

    第一章:工厂模式: 通过封装,继承,多态解耦合 业务逻辑和界面逻辑分开 用单独的类创造实例,工厂:创造实例 工厂模式还可以用反射来实现,nsstringFromClass UML类图 聚合表示一众弱的 ...

  8. SQL DATE_FORMAT() 函数

    参照原文:https://blog.csdn.net/moakun/article/details/82290387 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据 MySQL 使 ...

  9. Qt5线程错误:QThread: Destroyed while thread is still running(执行runThread->exit(0))

    背景: 当前类,编写接收子线程类信号的槽函数和触发子线程类执行的信号: 新建一个子线程类,编写槽函数和信号,MyClass *m_MyClass=new MyClass(): 新建一个线程对象QThr ...

  10. kubernetes的应用数据持久化

    1.无状态应用与有状态应用 应用的有状态和无状态是根据应用是否有持久化保存数据的需求而言的,即持久化保存数据的应用为有状态的应用,反之则为无状态的应用.常见的系统往往是有状态的应用,比如对于微博和微信 ...