上一篇写了代码创建网格,现在这一篇就是骨骼动画。中间跳过了一些 UV 贴图什么的内容 有空再补上。
主要的工作内容就是
1 网络 ,点和面。
2.UV,贴图。 (代码没有 这一块 就用了个默认的材质)
3 骨骼, 骨骼权重 。
4 骨骼 的 动画曲线。

看起来都是美术的工作对不对 。 程序员就是不要搞美术。

using UnityEngine;
using System.Collections;public class boneWeig : MonoBehaviour {public  AnimationCurve curve;public  AnimationClip  clip;void Start() {//boneWeigTest ();cubeAnimation ();}void Update () {        }GameObject cubeAnimation (){GameObject a = new GameObject ();a.AddComponent<Animation>();a.AddComponent<SkinnedMeshRenderer>();// 蒙皮网络渲染器SkinnedMeshRenderer rend = a.GetComponent<SkinnedMeshRenderer>();Animation anim = a.GetComponent<Animation>();rend.material = new Material(Shader.Find("Diffuse"));Mesh mesh = new Mesh();//   做一个长方体的网格  段数设为5   就是int leng = 5;Vector3[] ves = new Vector3[leng * 4];for (int i=0; i<leng; i++) {ves[i*4]  = new Vector3(1,2*i,-1);ves[i*4+1]= new Vector3(1,2*i,1);ves[i*4+2]= new Vector3(-1,2*i,1);ves[i*4+3]= new Vector3(-1,2*i,-1);}mesh.vertices = ves;//  三角面 数组int [] tris = new int[3 * 2 * 4 * (leng - 1)+12];int k = 0;// 环状面for(int i=0;i<leng-1;i++){for(int j=0;j<4;j++){int base_v = i*4+j;print (base_v+"    ...");tris[k]=base_v;k++;tris[k]=base_v+4;k++;if(j==3){tris[k]=base_v+1;}else{tris[k]=base_v+5;}k++;tris[k]=base_v;k++;if(j==3){tris[k]=base_v+1;}else{tris[k]=base_v+5;}k++;if(j==3){tris[k]=base_v-3;}else{tris[k]=base_v+1;}k++;}}//  长方体上 下两个面 = 4 个三角面  = 12 长度的顶点数组tris [k] = 0;k++;tris [k] = 1;k++;tris [k] = 2;k++;tris [k] = 0;k++;tris [k] = 2;k++;tris [k] = 3;k++;int top_base_i =(leng-1)*4;tris [k] = top_base_i;k++;tris [k] = top_base_i+2;k++;tris [k] = top_base_i+1;k++;tris [k] = top_base_i;k++;tris [k] = top_base_i+3;k++;tris [k] = top_base_i+2;mesh.triangles = tris;mesh.RecalculateNormals ();rend.sharedMesh = mesh;//应该先做两个骨头  用来测试Transform[] bones = new Transform[2];//   绑定姿势Matrix4x4[] bindPoses = new Matrix4x4[2];bones[0] = new GameObject("Lower").transform;bones[0].parent = a.transform;bones[0].localRotation = Quaternion.identity;bones[0].localPosition = Vector3.zero;bindPoses[0] = bones[0].worldToLocalMatrix * a.transform.localToWorldMatrix;bones[1] = new GameObject("Upper").transform;bones[1].parent = a.transform;bones[1].localRotation = Quaternion.identity;bones[1].localPosition = new Vector3(0, 6, 0);bindPoses[1] = bones[1].worldToLocalMatrix * a.transform.localToWorldMatrix;mesh.bindposes = bindPoses;BoneWeight[] weights = new BoneWeight[leng*4];for (int i=0; i<weights.Length; i++) {if(i<8){//  下面 2 个环 的顶点  8个点由第一块骨头控制weights[i].boneIndex0 = 0;weights[i].weight0 = 1;}else if(i<12){//  中线环的顶点  4个点由两个骨头共同控制weights[i].boneIndex0 = 0;weights[i].weight0 = 0.5f;weights[i].boneIndex1 = 1;weights[i].weight1 = 0.5f;}else{//  上面 2 个环 的顶点  8个点由第二块骨头控制weights[i].boneIndex0 = 1;weights[i].weight0 = 1;}}mesh.boneWeights = weights;rend.bones = bones;curve = new AnimationCurve();//  2 个4 元数 控制  旋转 变形动画Quaternion  roZ = Quaternion.identity;Quaternion rotation = Quaternion.identity;rotation.eulerAngles = new Vector3 (0, 0, 60f);clip = new AnimationClip();AnimationCurve curvex = new AnimationCurve();curvex.keys = new Keyframe[] {new Keyframe(0, roZ.x, 0, 0),new Keyframe(4, rotation.x, 0, 0)};AnimationCurve curvey = new AnimationCurve();curvey.keys = new Keyframe[] {new Keyframe(0, roZ.y, 0, 0),new Keyframe(4, rotation.y, 0, 0)};AnimationCurve curvez = new AnimationCurve();curvez.keys = new Keyframe[] {new Keyframe(0, roZ.z, 0, 0),new Keyframe(4, rotation.z, 0, 0)};AnimationCurve curvew= new AnimationCurve();curvew.keys = new Keyframe[] {new Keyframe(0, roZ.w, 0, 0),new Keyframe(4, rotation.w, 0, 0)};// 直线 型  的动画曲线 //AnimationCurve    curvex = AnimationCurve.Linear(0.0f, quatZero.x, 7.0f, quatRotate.x);//  同里 可设置          localPosition.x      localScale.x clip.SetCurve("Lower", typeof(Transform), "localRotation.x", curvex);clip.SetCurve("Lower", typeof(Transform), "localRotation.y", curvey);clip.SetCurve("Lower", typeof(Transform), "localRotation.z", curvez);clip.SetCurve("Lower", typeof(Transform), "localRotation.w", curvew);//      用曲线做 材质颜色 的动画。
//      clip.SetCurve("", typeof(Material), "_Color.g", curve);clip.legacy = true;anim.AddClip(clip, "test");     anim.Play("test");return a;}
}

运行结果:

unity 代码创建控制骨络动画相关推荐

  1. 在代码中设置逐帧动画

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 上文介绍了在XML中定义逐帧动画,接下来本文中将介绍在代码中控制逐帧动画的加载和播放,代码如下: Activi ...

  2. 关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器

    对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪 ...

  3. Unity创建使用操纵杆飞行动画教程

    Unity 3d移动超级英雄使用操纵杆飞行 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:20节课 ...

  4. 从零开始用Unity开发坦克世界4.用动画控制履带的旋转运动

    坦克履带的动画效果有很多制作方法.在上篇中,利用改变贴图的offset来模拟出履带的运动.这种方法虽然凑合,但近看的时候太粗糙了,并且只适合于履带是一块模型的时候使用.如果履带是由数十个履带块组成的时 ...

  5. 代码创建 WPF 旋转动画

    原文:代码创建 WPF 旋转动画 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a771948524/article/details/9304001 ...

  6. Unity使用Isometric Z As Y Tilemap创建2.5D地图(三)如何用代码创建Tilemap

    Unity使用Isometric Z As Y Tilemap创建2.5D地图(三)如何用代码创建Tilemap 创建Tilemap Palette 1.一些需要了解的事情 1.1 UnityEdit ...

  7. Unity UI或3d模型的动画控制(Animation类)

    文章目录 Animation动画控制类 一.动画设置: 二.模型的动作选择: 三.关键方法: 四:实践展示: 五.控制模型移动: Animation动画控制类 在Unity中,我们可以使用2D的Spi ...

  8. Unity2D中代码创建一个龙骨动画(DragonBones)并换装

    一:如何兼容使用龙骨动画 请参考https://www.cnblogs.com/NightFrost/p/9585296.html 插件下载地址https://github.com/DragonBon ...

  9. 关于Unity如何创建静态动画图片

    1.先创建一个UI--Image图片 2.选中这个图片,选择Window窗口下的Animation 3.然后点击创建一个新的Animation动画片段(会自动生成相应的动画机,名字为物体名) 4.点击 ...

最新文章

  1. python 私有和保护成员变量如何实现?—— 单下划线 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量; 双下划线 开始的是私有成员,意思是只有类对象自己能访问...
  2. OpenCV调整彩色图像的饱和度和亮度
  3. 如何防御DDoS攻击
  4. Node.js Stream - 实战篇
  5. Python测试开发django5.urls.py参数name与a标签的引用
  6. 页眉中字数未满但自动换行
  7. 微信小程序开发教程第八章:微信小程序分组开发与左滑功能实现
  8. 一加代言人小罗伯特唐尼竟用华为P30 Pro发微博,当然是笑着原谅他
  9. 以太坊技术架构/技术栈
  10. Java编程:排序算法——归并排序
  11. 阿里消息中间件ONS消息乱序问题(二)
  12. HTML5标准学习 – 简介
  13. win10桌面mac化保姆级教程[干货] 小白也能拥有的简(酷)约(炫)实用桌面
  14. 20162327WJH Android开发程序设计实验报告
  15. 数实融合激变时刻,与长期主义同行
  16. Qt for Android获取手机序列号
  17. 新手小白怎样玩转短视频抖音吸粉公众号小说项目
  18. c语言中doubt和double,doubt的用法
  19. 万德python数据提取_Python量化-使用wind接口获取数据
  20. 访问局域网内SQL Server数据库方法

热门文章

  1. LWIP应用开发|广播与组播
  2. 浅谈博弈论与经济学的关系
  3. 生活随记-腊月第一天
  4. 想学习SharePoint,需要准备哪些方面的准备?--写给SharePoint新人
  5. 什么是IVR主动外呼(Outbound)(转)
  6. 桌面上文件有蓝色底的白色问号
  7. 小米pro笔记本安装win10+ubuntu双硬盘
  8. 使用ArrayList重写吃货联盟详解
  9. mysql的更新用法_mysql update语句的用法详解
  10. js获取classname值_用原生JS获取CLASS对象(很简单实用)