【Unity】模型渐变技术 BlendShapes变形
模型fbx拖拽到场景并赋予脚本上SkinnedMeshRenderer参数 按下空格即可演示渐变
可去到3DsMax 或 Blender等软件制作 这种带有BlendShapes的模型 (Sphere002)是另一个模型,3DsMax叫变形器。
可参考:【技术美术百人计划】美术 3.5 BlendShape基础_哔哩哔哩_bilibili
变形器大概用法:
1. 先复制一份这个原本的模型,拉到旁边,并编辑这个复制体,改改顶点(编辑顶点)
2. 原本的模型 添加变形器, 如上图 点击空的位置 右键 选中 场景中的复制体。
3. 选中要导出的模型 文件 - 导出 - 导出选定对象 ,后面要注意勾选变形 默认勾选的
假如不勾选变形会发生如下事情:
导出的fbx 放入Unity会发现没有BlendShapes 取而代之的是一个普通的MeshRenderer模型
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class BlendShapesTest : MonoBehaviour
{public SkinnedMeshRenderer skinMesh;public float speed = 4f;public float timer;public bool isPlaying;public int dir = 1;private int index;private void Awake(){index = skinMesh.sharedMesh.GetBlendShapeIndex("Sphere002");Debug.Log("index:" + index);}void Update(){//按下空格 进行A->B 或 B->A渐变模型if (!isPlaying && Input.GetKeyDown(KeyCode.Space)){isPlaying = true;float weight = skinMesh.GetBlendShapeWeight(index);if (weight <= 0){dir = 1;skinMesh.SetBlendShapeWeight(index, 0f);timer = 0;Debug.Log("开始动画 0 -> 100");}else{dir = -1;skinMesh.SetBlendShapeWeight(index, 100f);timer = 100f;Debug.Log("开始动画 100 -> 0");}}if (isPlaying){timer += Time.deltaTime * dir * speed;skinMesh.SetBlendShapeWeight(index, timer);if (dir == 1 && timer >= 100){skinMesh.SetBlendShapeWeight(index, 100);isPlaying = false;Debug.Log("0 -> 100 完成动画!");}else if (dir == -1 && timer <= 0){skinMesh.SetBlendShapeWeight(index, 0);isPlaying = false;Debug.Log("100 -> 0 完成动画!");}}}
}