Unity-Live2D

概述:这是我学习Unity中Live2d的相关操作的一个笔记,欢迎各位同好和大牛的指点。(参考siki学院出的视频学的)

注:由于这个鼠标拖拽操作内容相较之前来说有点多,所以分多块来记了。

鼠标拖拽触发动作变化

得到鼠标坐标参数,并将其转化为live2D拖拽坐标参数

  • 首先我们把这个管理拖拽坐标的类给定义出来,这个类是L2DTargetPoint;
    定义代码如下
private L2DTargetPoint drag;         //全局变量定义
drag = new L2DTragetPoint;          //在start中new处对象
  • 然后我们需要得到鼠标所在的屏幕坐标,这里我们新定义一个Vector3型的变量来存储这个得到的屏幕坐标,代码如下:
Vector3 pos = Input.mousePosition;           //将鼠标目前的屏幕坐标储存入pos中
  • 接着我们需要将得到的屏幕坐标转化为我们所需要用到的live2D坐标,这里我们设置其触发条件为点击鼠标左键(因为是在做拖拽动作嘛,所以点击拖拽了),然后转化方法的话,需要用到L2DTragetPoint中的一个内置方法Set,将屏幕坐标以一定形式传给拖拽坐标类L2DTragetPoint,还需要一套官方公式进行转换,先把代码贴出来吧:
if(Input.GetMouseButton(0))
{drag.Set(pos.x/Screen.width*2-1,pos.y/Screen.height*2-1);
}

然后来解释下这个转化坐标是个什么鬼,首先我们直接得到的是屏幕坐标,其长的范围是1024,宽为768,但是live2d拖拽坐标长宽范围都是是从-1到1的。屏幕坐标,就是字面意思了。这个live2d拖拽坐标,它其实可以理解成一个影响度,也就是比值,然后它这个是作为我们设置模型参数时候所用的一个比值,也就是比如说让模型某个位置旋转三十度,用30去乘以这个比值,它就会转换乘我们live2d模型的对应参数,去设置了。

然后再说说这个公式是个什么操作,这个公式来写入Set的俩个参数,它其实也就是一个将屏幕坐标(1024.768范围)转换为live2d拖拽坐标(-1—1范围)的一个算术转换,Scree.width就是屏幕坐标的横向长度,Scree.height就是屏幕坐标纵向长度.(具体公式设计原理就不说了).

利用live2D拖拽参数去设置我们的模型参数

  • 于上一篇笔记中有手动设置模型参数的操作笔记,这里直接贴蓝链了 https://blog.csdn.net/weixin_44579240/article/details/96749142
  • 这里的区别在于,用固定设置方法设置模型的参数时,参数值应该改为被设置部分的参数最大值乘以对应的live2D拖拽参数(X型的参数就乘drag.getX(),Y型的参数就乘drag.getY())(也就是所谓自变量)。
    代码举例如下:
live2DModel.setParamFloat("PARAM_ANGLE_X",30*drag.getX());

让人物跟着鼠标转起来

  • 这里其实就是将以上内容综合一下了,用鼠标左键作为得到一个live2d拖拽参数的触发条件,若未检测到左键点击,则令live2d拖拽参数归零,再用live2d拖拽参数非0作为人物转向的触发条件。人物转向具体操作就是将部分组件参数均写成随鼠标转动的版本,以我目前用的这个模型来说,就是身体,眼睛,头横向转动,头的纵向转动等。
    下面贴一份完整代码
private L2DTargetPoint drag;                 //全局变量定义
drag = new L2DTragetPoint;                   //在start中new处对象
//以下内容均在update中
Vector3 pos = Input.mousePosition;           //将鼠标目前的屏幕坐标储存入pos中
if(Input.GetMouseButton(0))                  //检测鼠标左键,将读取到的鼠标屏幕坐标转化为相应live2D拖拽参数
{drag.Set(pos.x/Screen.width*2-1,pos.y/Screen.height*2-1);
}
else if(Input.GetMouseButtonUp(0))            //当未检测到鼠标左键时令live2d拖拽参数清零
{drag.Set(0,0);
}
if(drag.getX()!=0||drag.getY()!=0)            //检测拖拽参数不为0时,改变模型参数
{live2DModel.setParamFloat("PARAM_ANGLE_X",30*drag.getX());live2DModel.setParamFloat("PARAM_ANGLE_Y",30*drag.getY());live2DModel.setParamFloat("PARAM_BODY_ANGLE_X",10*drag.getX());live2DModel.setParamFloat("PARAM_EYE_BALL_X",drag.getX());live2DModel.setParamFloat("PARAM_EYE_BALL_Y",drag.getY());
}

附加
可能会有说,输上上面的代码没有办法达到效果的,我大致检测了以下,屏幕坐标的获取没有问题,公式转化也没有问题,问题出在这个拖拽参数的类(private L2DTargetPoint drag; )上,即使用了 drag.Set(pos.x/Screen.width2-1,pos.y/Screen.height2-1); 这段代码,其中的drag.getX()也依旧是0,所以在这里,我用一个float型的变量代替了getX(),同理用一个float变量代替getY(),虽然不知道是否会有其他影响,不过可以确定的是,这个float参数直接得到公式计算结果,作为权值来使用可以达到我们想要的效果。

Unity-Live2d(鼠标拖拽触发动作变化)相关推荐

  1. Unity移动---鼠标拖拽物体在3D空间移动(地面和非地面)

    我这里脚本挂在了摄像机上: 下面是脚本: using System.Collections; using System.Collections.Generic; using UnityEngine;p ...

  2. vue+element制作音乐播放器播放进度条bug(鼠标拖拽slider滑块滑动到指定位置无效)

    最开始bug还没解决时的效果图 bug解决后的效果图 项目场景: 想自己做一个基于vue仿网易云音乐的音乐网站,在制作播放器的时候用到了element ui里面的slider组件,制作完成后发现使用c ...

  3. html div 可鼠标滚动,js实现鼠标拖拽div左右滑动

    本文实例为大家分享了js鼠标拖拽div左右滑动的具体代码,供大家参考,具体内容如下 Title body{ position: relative; margin:0; padding:0; width ...

  4. 自动化测试之鼠标悬浮操作、双击、鼠标拖拽

    鼠标操作.封装在ActionChains中 -move_to_element -double_click 双击 -context_click right_click 右键 -drag_and_drop ...

  5. html5的鼠标拖拽

    鼠标拖拽 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...

  6. javascript鼠标拖拽的那些事情

    <html> <head> <title>javascript鼠标拖拽的那些事情</title> <meta http-equiv="C ...

  7. 3dmax java_Java3D读取3DMax模型并实现鼠标拖拽、旋转、滚轮缩放等功能

    /**-------------------------------------------------代码区--------------------------------------------- ...

  8. unity2d里实现鼠标拖拽物体的功能

    在 Unity 中实现鼠标拖拽物体的功能需要使用到 Unity 的 Physics 系统. 要实现鼠标拖拽物体,你需要在场景中添加以下内容: 一个 Rigidbody 2D 组件,用于控制物体的运动. ...

  9. GMap 鼠标拖拽与单击冲突问题以及按下鼠标移动Marker

    GMap 鼠标拖拽与单击冲突问题以及按下鼠标移动Marker 好久没有写博客啦,之前写了三篇关于GMap的,还是想继续写下去,在之前的基础之上本篇博客就解决两个问题吧: 我们在使用鼠标拖拽地图时,拖拽 ...

最新文章

  1. 微信小程序:获取地理定位和显示相应的城市名称。
  2. @value 静态变量_你理解 PHP 中的静态方法吗?
  3. dw指向html的根路径,dreamweaver中绝对、文档相对和站点根目录相对路径区分
  4. WIN10系统如何取消任务栏处的窗口缩略图
  5. java多态可以传匿名对象吗_Java复习笔记2--匿名类和多态
  6. Pygal简介、画廊--各种图形绘图代码
  7. jQuery 的上传图片预览插件
  8. bs后端开发语言_哪种编程语言适合后端开发?Java和PHP的区别在哪?
  9. bat导出远程oracle数据,windows 任务计划 实现oracle远程 数据库备份
  10. MAC OS git客户端安装及操作
  11. cJSON基本使用方法
  12. 个人理财管理系统代码
  13. bzoj 1127 [POI2008]KUP——思路(悬线法)
  14. 谁先量子计算机谁就,G、IBM、中科院,比一比谁先实现量子计算霸权?
  15. 摩根大通提交分散式虚拟收据系统新专利
  16. 网易云发布“工业智能平台”,开放技术赋能工业企业
  17. 基于组态王和三菱PLC的modbus仿真(七)——RS指令
  18. 医学图像处理——影像组学的建模过程
  19. C语言基础课第五次作业
  20. 世界各国国旗及国家名称

热门文章

  1. 【好数推荐】数据堂平均音色语音库
  2. 判断手机号所属运营商--课后程序(Python程序开发案例教程-黑马程序员编著-第11章-课后作业)
  3. 去面试却被问的哑口无言,是不是踏入了机器学习误区
  4. Linux终端-对NTFS文件系统数据丢失后的恢复案例
  5. 26种英语形容词后缀讲解
  6. 测试化妆品真假软件,查询化妆品真伪的app叫什么
  7. 浮动元素将父级高度撑开
  8. 《被讨厌的勇气》摘抄
  9. OSChina 周五乱弹 —— 那地图上的点到底去哪儿
  10. ie浏览器通过ActiveX控件获取本机macip(附带批处理一键开启)