环境(其实没什么关系):

Unity 2019.4.0f1

CubismSdkForUnity-4-r.1

阅读这篇文章可以让你把模型丢到自己想丢的地方上

首先不用找官方给你整理好的拖拽脚本了,这种功能还是要自己去实现的!!

开始:

直接在模型根部挂一个实现拖拽功能的脚本

说到拖拽 自然就是通过鼠标输入来改变物体的坐标

我们要拿到两个值:

1.鼠标输入

2.模型坐标(附属物件坐标)

设计计算公式:

鼠标最初点到模型上的坐标和模型的中心目标会形成一个差值

如若不设置差值,物体的中心则跟随鼠标输入的坐标移动,这个是什么效果试试就懂了,总之不太好看

差值计算公式=物体中心坐标-鼠标输入坐标

移动的目的地=鼠标输入坐标+差值

世界坐标与屏幕坐标的转换可以参考其他文档

在此文档就随便添几笔以带过

附上代码:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Drag : MonoBehaviour

{

//鼠标输入

private Vector3 _Mouth;

//目标

private Vector3 _Target;

//差值

private Vector3 offect;

//当前 物件 位置

private Transform _Transform;

//附件UI

public UnityEngine.UI.Text _Text;

private Vector3 Text_offect;

public UnityEngine.UI.Image _Image;

private Vector3 Image_offect;

void Start()

{

_Transform = transform;

//固定值 这个自己调试

//Text_offect = new Vector3(140, 150, 0);

//Image_offect = new Vector3(110, 150, 0);

}

//协程

private IEnumerator OnMouseDown()

{

_Mouth = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _Transform.position.z + 10f);

//差值计算公式=物体中心坐标-鼠标输入坐标

offect = _Transform.position - Camera.main.ScreenToWorldPoint(_Mouth);

Text_offect = _Text.transform.position - _Mouth;

Image_offect = _Image.transform.position - _Mouth;

while (Input.GetMouseButton(0))

{

_Mouth = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _Transform.position.z+10f);

//目标=差值+鼠标输入

_Target = Camera.main.ScreenToWorldPoint(_Mouth) + offect;

_Transform.position = _Target;

//让显示的文字和文本框也跟着移动

_Text.transform.position = _Mouth + Text_offect;

_Image.transform.position =_Mouth + Image_offect;

//固定值对应公式

// _Text.transform.position = Camera.main.WorldToScreenPoint(_Target) + Text_offect;

// _Image.transform.position = Camera.main.WorldToScreenPoint(_Target) + Image_offect;

yield return new WaitForFixedUpdate();

}

}

}

这里也添加了UI物体的拖动,如不需要可以直接注释掉

建议用固定值(这样就不用自己绞尽脑汁地思考公式了!)

然后在模型上添加一个碰撞脚本(随便哪个collider 2D) 鼠标方可在上面点击 (不加就点不了)

关于世界坐标与屏幕坐标

一般用Camera.main中两个方法

WorldToScreenPoint:世界转屏幕 坐标点

ScreenToWorldPoint:屏幕转世界 坐标点

传入Vector3 对象

简单区分:

游戏物件位于世界上

UI位于屏幕上

鼠标点击计算的是屏幕坐标 要拖动游戏物体则必须转换为世界坐标使用

然后试试就可以随便操作了

提醒一下:如果你没处理好LookAt 拖动模型的话就会……

回到目录:传送门

live2d碰撞_Unity Live2D 模型(与UI)拖拽功能 实现源码相关推荐

  1. 2018年首篇,带大家一起学习视图拖拽功能的源码

    今天的快讯我们对2017年的重大事件进行一下回顾吧. 乐视事件 回溯乐视的2017,"眼看他起朱楼,眼看他宴宾客,眼看他楼塌了".乐视历经了来自融创中国百亿融资.高层相继离职.裁员 ...

  2. jQuery UI 拖拽功能

    原文地址:http://www.cnblogs.com/holbrook/archive/2012/03/13/2394111.html JQuery UI是JQuery官方支持的WebUI 代码库, ...

  3. java 拖拽生成_JAVA UI 拖拽功能

    java GUI拖拽功能是很实用也相对高级一些的功能. 有一小部分的GUI控件支持 他们有dragEnabled属性.这些JComponent包括: javax.swing.JColorChooser ...

  4. OA会议管理系统之我的会议(会议排座可拖拽座位附源码)

    目录 一.前言 1.导读 二.我的会议功能实现 1.功能介绍 2.功能分析 3.功能实现 3.1.前期准备 3.2.dao层编写 3.3.jsp页面搭建 3.4.Web层编写 4.案例展示 一.前言 ...

  5. Qt工作笔记-在QTreeView上实现模型数据的拖拽

    运行截图如下: 逻辑是: 1.QTreeView开发拖拽功能. 2.在自定义模型中重写 flags(const QModelIndex &index) const mimeData(const ...

  6. jquery ui 拖拽

    Query UI是JQuery官方支持的WebUI 代码库,包含底层交互.动画.特效等API,并且封装了一些Web小部件(Widget).同时,JQuery UI继承了jquery的插件支持,有大量的 ...

  7. JQuery UI的拖拽功能

    JQuery UI是JQuery官方支持的WebUI 代码库,包含底层交互.动画.特效等API,并且封装了一些Web小部件(Widget).同时,JQuery UI继承了jquery的插件支持,有大量 ...

  8. Element UI表格行拖拽功能

    效果 <template><div class="hello"><!-- 拖拽功能必须绑定row-key唯一 --><el-tablere ...

  9. css元素可拖动,使用css-transform实现更好的拖拽功能

    拖拽功能是目前网页上一种非常常见的功能,例如"登录弹窗"的拖拽.本文将使用transform来实现这一功能. 一.拖拽的用户行为分析与原理解析 二.代码实现 三.总结 本文所涉及的 ...

  10. 如何玩转sortablejs-vuedraggable实现表单嵌套拖拽功能

    最近几天在研究有关vue实现拖拽的功能,不过跟一般的拖拽排序有点不同,这个需求可能出现多行多列嵌套的表单元素,数据也是递归形式的出现.我也是在vuedraggable的基础上扩展实现的,如何想了解更多 ...

最新文章

  1. Python-OpenCV 处理图像(五):图像中边界和轮廓检测
  2. 黄聪:DEDECMS系统栏目、文章页面、分页面伪静态和域名301重定向详细方法
  3. 斯坦福cs161算法考试的cheat sheet!!!十分重要!!!
  4. iOS c语言 基本运算符
  5. 利用bootstrap插件设置时间
  6. PHP、C#、通用的DES加密
  7. idea插件导出_Intellij IDEA 中我一直在用的几个插件
  8. gin ajax 获取请求参数,gin请求参数处理
  9. 最简单的SpringMVC + Maven配置
  10. 通信原理眼图画法_通信原理课程总结(二)
  11. java数学系统总结与展望_总结与展望
  12. 为什么觉得今年工作特别难找?
  13. 《版式设计——日本平面设计师参考手册》—第1章置入其他格式的文件
  14. Redis设计与实现-监视器
  15. yum install gcc报错Error: Package: glibc-2.17-260.el7_6.6.i686 (updates) Requires: glibc-common = 2.17
  16. 使用 DUET/REFIND 方法将 NVME 添加为引导驱动器
  17. 如何选购电风扇,一本电风扇选购攻略都在这里!
  18. 青橙 GO M3 3G手机(珍珠黑)WCDMA/GSM 双卡双待 360特供机--高通胶水双核,A5老架构,内存缩水,,,强烈要求降价...
  19. 谷歌浏览器上传图片和图片另存为就卡死崩溃解决方案
  20. 热爱生命 - 汪国真

热门文章

  1. 海康ehome协议分析(3):PTZ云台控制
  2. 莫烦强化学习-Q Learning
  3. 伍德里奇计量经济学第六章计算机答案,伍德里奇计量经济学导论计算机习题第六章第13题c_6.13...
  4. 西门子224XP源码,包括pcb,原理图,224xp源码
  5. Vue SSR服务端渲染 vue预渲染
  6. 阵列信号处理及matlab实现,《阵列信号处理的理论和应用》(pdf+程序)
  7. 【爬虫】爬取当当网的图书信息
  8. threejs添加天空盒
  9. 服务器器ip的A段B段C段是什么意思有什么意义
  10. eclipse和myeclipse集成Xjad