人物模型是从live2d下载下来的,这么可爱的二次元不可能是我画的。
live2d本身有对鼠标监测的封装方法(见对象L2DTargetPoint),鼠标在live2d的拖拽管理坐标系内会反馈一个c#教程鼠标的影响度,可看成一个在-1到1之间的比例值;
这里的方法是:
1.先获取鼠标当前在屏幕的位置
2.利用已有公式将当前鼠标物理位置x转换成live2d内的世界坐标值y
3.通过y值去设置人物本身在unity中的动作幅度转动从python基础教程而实现跟随鼠标发生相应肢体变化的效果
先贴码源

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using live2d;
using live2d.framework;public class Live2dModel : MonoBehaviour
{public TextAsset modelFile;public Texture2D[] textures;public TextAsset[] motionFiles; //加载模型动画数组private Live2DMotion[] motions; //动作数组private L2DMotionManager l2DMotionManager;//优先级的设置标准//1.动作未进行的状态,优先级为0//2.待机动作发生时,优先级为1//3.其他动作进行时,优先级为2//4.无视优先级,强制发生的动作private Live2DModelUnity live2dModel;private Matrix4x4 live2DCanvasPos;private MotionQueueManager motionQueueManager; //动作的管理private MotionQueueManager motionQueueManagerA;private EyeBlinkMotion eyeBlinkMotion;//鼠标拖拽引起的动作变化private L2DTargetPoint drag;public int motionIndex;public float a;// Start is called before the first frame updatevoid Start(){//初始化Live2D.init();for (int i = 0; i < textures.Length; i++){live2dModel.setTexture(i, textures[i]);}//指定显示位置和尺寸(使用正交矩阵与相关API显示图像,再由游戏物体)float modelWidth = live2dModel.getCanvasWidth();live2DCanvasPos = Matrix4x4.Ortho(0, modelWidth, modelWidth, 0, -50, 50);//播放动作//实例化动作对象//1.直接获取路径赋值来获取动画播放//live2DMotionIdle = Live2DMotion.loadMotion(Application.dataPath + "");//2.用textasset来加载动画播放资源 //TextAsset mtnFile = Resources.Load<TextAsset>("");//live2DMotionIdle = Live2DMotion.loadMotion(mtnFile.bytes);motions = new Live2DMotion[motionFiles.Length];for (int i = 0; i < motionFiles.Length; i++){motions[i] = Live2DMotion.loadMotion(motionFiles[i].bytes);     //遍历完成所有动作的加载}//设置某一个动画的一些属性//setLoopFadeIn方法:重复播放的时候是否加上动作渐变淡入(即当前动作帧数较多 False是不淡入//setFadeOut方法:如果不设置那么默认淡出时间是1000ms 动作播放时长motions[0].setLoopFadeIn(false);motions[0].setFadeOut(1000);//动作的优先级使用l2DMotionManager = new L2DMotionManager();//眨眼eyeBlinkMotion = new EyeBlinkMotion();//鼠标拖拽drag = new L2DTargetPoint();}// Update is called once per framevoid Update(){//具体是为了让camera把人物显示出来live2dModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos); //模型跟随鼠标转向与看向//得到的live2d鼠标监测点的比例值是-1到1(对应一个live2d的拖拽管理坐标系,或者说叫影响度)//然后我们通过这个值去设置我们的参数 比如选择30°*当前得到的值//就会按照这个值所带来的影响度去影响我们的模型//从而达到看向鼠标点位置的效果Vector3 pos = Input.mousePosition;if (Input.GetMouseButton(0))     //0按下鼠标左键   1按下鼠标右键{//把当前的屏幕鼠标坐标转化成l2d内的鼠标监测坐标drag.Set(pos.x/Screen.width*2-1,pos.y/Screen.height*2-1);}else if (Input.GetMouseButtonUp(0)){drag.Set(0, 0);}//参数及时更新,考虑加速度等自然因素,计算坐标,进行逐帧更新drag.update();//模型转向if (drag.getX() != 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());}//眨眼eyeBlinkMotion.setParam(live2dModel);//更新模型定点、参数、贴图live2dModel.update();}//绘图private void OnRenderObject(){live2dModel.draw();}private void StartMotion(int motionIndex, int priority){//当前播放的动画优先级比传进来的高 返回if (l2DMotionManager.getCurrentPriority() >= priority){return;}l2DMotionManager.startMotion(motions[motionIndex]);}}

详细见注释。

没研究出来怎么发GIF图,动作效果待补充。

Unity-Live2D实现GalGame中人物随鼠标点击移动相关推荐

  1. unity+live2d制作galgame框架

    unity+live2d制作galgame框架 前置准备 分层 按钮和背景图 live2D模型控制 前置准备 安装unity[free版即可] unity下载 下载live2d for unity的s ...

  2. Unity中,实现鼠标点击物体,触发事件

    对于UI,很容易能够实现鼠标点击,从而触发事件,但是对于游戏中的物体,则需要多进行一些操作. 原理很简单,就是由鼠标点击处发射线,与游戏物体发生碰撞,碰撞到的物体,就是你点击到的物体.具体操作如下: ...

  3. c++图形中如何判断鼠标点击在一条直线上_PS教程:十种抠图方法【上】

    今天的关键字是"抠图" 日常工作生活中大家可能经常会用到抠图的技能 方法很多 包括使用美图秀秀等 我之前也分享过比如利用ppt如何抠图 那么今天就来给大家介绍十种用ps抠图的方法: ...

  4. python截取图片的ROI+OpenCV 在坐标中显示图片+鼠标点击图片显示点坐标

    又来做下笔记了.现在我的毕业设计进行到数据处理的阶段,要在乳腺图像上截取4张相同大小的1024*1024图片,并且每张图片都必须覆盖微钙化点,以下是我现在用到的一些简单程序. 1.首先是截图程序如下: ...

  5. qt中QScrollBar/QSlider鼠标点击滑条不能到达所点击的位置,只移动step距离修改

    // 方法是鼠标点击事件 void XSlider::mousePressEvent(QMouseEvent *e){// 向上父控件传递鼠标事件:否则,鼠标其他事件会失灵QSlider::mouse ...

  6. c++图形中如何判断鼠标点击在一条直线上_中考数学常考题型精讲精练系列:函数图象上点的存在性问题中的距离与面积...

    函数图象上点的存在性问题中的距离与面积(下)第1段 函数图象上点的存在性问题中的距离与面积(下)第2,3段 函数图象上点的存在性问题中的距离与面积(下)第4段 判断函数的图像是中考的重要考点,主要有以 ...

  7. C# 在获得鼠标点击事件时,如何判断Control键,Shift键被按下

    在C#的窗体程序中,获得鼠标点击的事件时,想要得知当前是否有Control键,Shift键等是否被按下. 1 private void xxx_MouseClick(object sender, Mo ...

  8. PyQt5重写QComboBox的鼠标点击事件

    最近学PyQt5,想要做一个串口调试助手来练练手,之前用了正点原子的串口上位机,觉得点击ComboBox自动检测串口这个功能很棒,之前用QT5写串口调试助手的时候也想加入这个功能,但是一直没有成功,之 ...

  9. Unity中在鼠标点击的UI地方创建预制件+在指定地方创建预制件

    目录 一.目的: 1.想知道:Unity中在鼠标点击的UI地方创建预制件 二.参考: 1.Unity中动态给button的OnClick添加代码 1.Unity 在代码中设置RectTransform ...

最新文章

  1. Python数据框结合lambda函数的使用
  2. 专访旷视副总裁彭广平:旷视为何选择收购艾瑞思?
  3. go select 与 for 区别_Go 面试每天一篇(第 102 天)
  4. 有没有办法使用命令行cURL跟踪重定向?
  5. citrix xenapp应用保存文件时隐藏服务器上的磁盘
  6. 在vs code中创建代码片段
  7. -webkit-border-radius和-moz-border-radius(转)
  8. 盘点Spring Boot最核心的27个注解
  9. 使用Maven实施自定义JSF 2.0组件
  10. 打开stl文件_介绍一种修复、查看以及打印STL三维模型文件的工具
  11. (18)Verilog HDL结构:initial语句
  12. MTK:串口调试方法|MTK串口工具
  13. Micmac摄影测量软件介绍
  14. 基于Python开发用于钞票认证的神经网络
  15. SQL Server数据行的物理空间分配
  16. Julia也能做爬虫?可以,但没必要
  17. ubuntu dos转linux命令行,Ubuntu下代替dos2unix命令
  18. LABjs分析 http://labjs.com/documentation.php#queuescript
  19. linux pthread_cleanup_push 线程实现,线程清理(pthread_cleanup_push函数和pthread_cleanup_pop函数)...
  20. 回首150年炒股史 | 消灭散户的终极武器竟然是“它”?!

热门文章

  1. error adding module to project: null
  2. OSGI的建筑学模拟
  3. AutoCAD 2014中不能看到矩形选择框的解决办法
  4. 好好玩嘅ps效果—PS模拟移轴镜摄影教程
  5. 欧奈尔杯柄形态选股公式,突破杯柄高点发出信号
  6. 火爆B站的阿玮老师,他带着课程走来了(含4天入门到精通Java直播课)
  7. c++中也有java中的匿名内部类
  8. 解决树叶法线方向的问题
  9. 仰望星空,脚踏实地之我的成长之路
  10. 微信小程序—调用扫一扫功能,通过扫描二维码连接蓝牙模块