Unity-Live2d
概述::这是我学习Unity中Live2d的相关操作的一个笔记,欢迎各位同好和大牛的指点。(参考siki学院出的视频学的)
模型与贴图建立联系
-
首先我们得得到模型,在上一个博客(https://blog.youkuaiyun.com/weixin_44579240/article/details/92253635 ) 里有写道如何去读取模型,并且读取成功后会有一个模型返回值,我们用一个新对象来接受它这个返回值
privide LivedDModelUnity live2DModel;
live2DModel = Live2DModelUnity.loadModel(modelFile.bytes);
这样就得到模型live2DModel了; -
然后我们得得到贴图,就用最简单粗暴的公开拖入的方法吧
如:public Texture2D[] texture2D=new Texture2D [3];
然后将对应的美工已经做好的贴图按照顺序拖入即可; -
接下来就是让贴图和模型建立联系了,主要需要使用的代码是
live2DModel.setTexture(0, texture2D[0]);
意为将贴图中第一个赋值给模型的第一个贴图位,当有多个贴图的时候就需要一个循环来解决这个多重的赋值问题了;
for (int i = 0; i < texture2D.Length; i++)
{
live2DModel.setTexture(i, texture2D[i]);
}
渲染
-
首先我们得得到一个负责渲染的4X4矩阵的画布;
private Matrix4x4 live2DCanvasPos;
这样就可以先创建下一个4X4矩阵的画布了; -
画布具体大小自然要和我们的模型有关,所以我们先得到模型的宽度参数;
float modelWidth = live2DModel.getCanvasWidth();
这句代码大致的意思是取得模型live2DModel的宽度,将其赋给float型变量modelWidth; -
好了,得到了模型相关的宽度参数,就该给画布赋值来确定大小了;
live2DCanvasPos=Matrix4x4.Ortho(0,modelWidth,modelWidth,0,-50,50);
这句代码的意思是给矩阵live2DCanvasPos赋值,后面的六个参数,前面俩个的大致意思为左侧位置,右侧位置(相差得到的便是模型的宽度,所以我们让其中一个等于0,另一个等于模型宽度即可),中间俩个分别为底部和顶部(用法同上了),后面俩个是近点位置与远点位置(貌似没什么卵用,好吧,其实是因为我暂时不太懂有什么用),具体参数按照上面一套固定参数使用即可,所以不需要深究到底是个啥,仅作了解也够用。 -
画布建好之后还得将我们的摄像机调整成正交相机
即如图相机的参数projection设置为Orthographic,如下图;
还有就是要将相机界面设置成固定颜色,即参数Clear Flags设置为Solid Color,再将Background调整一下(这里推荐白色),如下图;
显示模型图片
(由于以下内容都是实时更新的,所以我们得将其写入实时更新的方法内进行调用)
- 第一步我们得给模型矩阵赋上一个值,而这个值是由我们脚本所挂载的这个空的游戏物体的世界坐标矩阵与画布矩阵所乘得到的代码如下:
live2DModel.setMatrix(transform.localToWorldMatrix*live2DCanvasPos);
transform.localToWorldMatrix是当前游戏物体的transform参数转化为世界坐标矩阵的一个参数值,live2DCanvasPos就是画布矩阵了。(这一步写在Update中) - 接下来第二部我们得实时更新模型顶底,这一步我们直接调用live2D模型里的方法update,这个方法可以实时更新模型个很多参数,包括顶点在内。
代码为:
live2DModel.update();
(写入Update中) - 然后是绘图,也是直接调用live2D中的方法就行了,调用内置的draw方法,可以进行绘图操作。
代码:
live2DModel.draw();
(这一步比较特殊我们得将它放入一个固定的生命周期的函数内,该函数为private void OnRenderObject())
(激动人心,见证奇迹,显示画面的时刻到了)
最后还有就是,显示的图片如果不在屏幕中央可以拖动脚本挂在物体去改变图片的位置,如果图片大小不对,可以去改动相机的size参数。