项目需要捏身体搞了一个简单的测试,只是测试效果,不做正式使用
maya的身体里面原有的骨骼下面新加了一套scale骨骼,命名 “%s_skin”%old骨骼。
在maya中按照身体的各个部位缩放一套极限值制作一个表格
身体骨架FBX导出进unity,替换之前的预制体
简单创建需要的slider 因为有胖瘦所以参数设置 最小值0 最大值2 ,V = 1
然后准备脚本
以hip骨骼为例
```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class hips_Knead_test : MonoBehaviour
{
public Slider Hips_Slider;
[SerializeField]
private Transform Hip_L_skin;
public Transform Hip_L
{
get { return Hip_L_skin; }
}
[SerializeField]
private Transform Hip_R_skin;
public Transform Hip_R
{
get { return Hip_R_skin; }
}
[SerializeField]
private Transform HipPart1_L_skin;
public Transform HipPart1_L
{
get { return HipPart1_L_skin; }
}
[SerializeField]
private Transform HipPart1_R_skin;
public Transform HipPart1_R
{
get { return HipPart1_R_skin; }
}
[SerializeField]
private Transform HipPart2_L_skin;
public Transform HipPart2_L
{
get { return HipPart2_L_skin; }
}
[SerializeField]
private Transform HipPart2_R_skin;
public Transform HipPart2_R
{
get { return HipPart2_R_skin; }
}
[ContextMenu("自动添加绑定关系")]
void SetParameters()
{
//Debug.Log(GameObject.Find("pre_Character 1"));
Hip_L_skin = transform.Find("main/peopleFBX_rig/Main_M/Root_M/Hip_L/Hip_L_skin");
Hip_R_skin = transform.Find("main/peopleFBX_rig/Main_M/Root_M/Hip_R/Hip_R_skin");
HipPart1_L_skin = transform.Find("main/peopleFBX_rig/Main_M/Root_M/Hip_L/HipPart1_L/HipPart1_L_skin");
HipPart1_R_skin = transform.Find("main/peopleFBX_rig/Main_M/Root_M/Hip_R/HipPart1_R/HipPart1_R_skin");
HipPart2_L_skin = transform.Find("main/peopleFBX_rig/Main_M/Root_M/Hip_L/HipPart1_L/HipPart2_L/HipPart2_L_skin");
HipPart2_R_skin = transform.Find("main/peopleFBX_rig/Main_M/Root_M/Hip_R/HipPart1_R/HipPart2_R/HipPart2_R_skin");
}
void Reset()
{
//Debug.Log(GameObject.Find("neck_Slider"));
SetParameters();
}
void Start()
{
}
void Update()
{
}
public void HipsSliderChanged()
{
if (Hips_Slider.value == 1.0f)
{
//aa1_skin.transform.localScale(1, slider.value, 1);
Hip_L_skin.localScale = new Vector3(1.0f, 1.0f, 1.0f);
Hip_R_skin.localScale = new Vector3(1.0f, 1.0f, 1.0f);
HipPart1_L_skin.localScale = new Vector3(1.0f, 1.0f, 1.0f);
HipPart1_R_skin.localScale = new Vector3(1.0f, 1.0f, 1.0f);
HipPart2_L_skin.localScale = new Vector3(1.0f, 1.0f, 1.0f);
HipPart2_R_skin.localScale = new Vector3(1.0f, 1.0f, 1.0f);
}
else if (Hips_Slider.value <= 1.0f)
{
//aa1_skin.transform.localScale(1, slider.value, 1);
Hip_L_skin.localScale = new Vector3(1.0f, Hips_Slider.value * (1.0f - 0.3f) + 0.3f, Hips_Slider.value * (1.0f - 0.4f) + 0.4f);
Hip_R_skin.localScale = new Vector3(1.0f, Hips_Slider.value * (1.0f - 0.3f) + 0.3f, Hips_Slider.value * (1.0f - 0.4f) + 0.4f);
HipPart1_L_skin.localScale = new Vector3(1.0f, Hips_Slider.value * (1.0f - 0.3f) + 0.3f, Hips_Slider.value * (1.0f - 0.4f) + 0.4f);
HipPart1_R_skin.localScale = new Vector3(1.0f, Hips_Slider.value * (1.0f - 0.3f) + 0.3f, Hips_Slider.value * (1.0f - 0.4f) + 0.4f);
HipPart2_L_skin.localScale = new Vector3(1.0f, Hips_Slider.value * (1.0f - 0.4f) + 0.4f, Hips_Slider.value * (1.0f - 0.5f) + 0.5f);
HipPart2_R_skin.localScale = new Vector3(1.0f, Hips_Slider.value * (1.0f - 0.4f) + 0.4f, Hips_Slider.value * (1.0f - 0.5f) + 0.5f);
}
else if (Hips_Slider.value >= 1.0f)
{
//aa1_skin.transform.localScale(1, slider.value, 1);
Hip_L_skin.localScale = new Vector3(1.0f, (Hips_Slider.value - 1) * (1.2f - 1.0f) + 1.0f, (Hips_Slider.value - 1) * (1.2f - 1.0f) + 1.0f);
Hip_R_skin.localScale = new Vector3(1.0f, (Hips_Slider.value - 1) * (1.2f - 1.0f) + 1.0f, (Hips_Slider.value - 1) * (1.2f - 1.0f) + 1.0f);
HipPart1_L_skin.localScale = new Vector3(1.0f, (Hips_Slider.value - 1) * (1.2f - 1.0f) + 1.0f, (Hips_Slider.value - 1) * (1.5f - 1.0f) + 1.0f);
HipPart1_R_skin.localScale = new Vector3(1.0f, (Hips_Slider.value - 1) * (1.2f - 1.0f) + 1.0f, (Hips_Slider.value - 1) * (1.5f - 1.0f) + 1.0f);
HipPart2_L_skin.localScale = new Vector3(1.0f, (Hips_Slider.value - 1) * (1.2f - 1.0f) + 1.0f, (Hips_Slider.value - 1) * (1.5f - 1.0f) + 1.0f);
HipPart2_R_skin.localScale = new Vector3(1.0f, (Hips_Slider.value - 1) * (1.2f - 1.0f) + 1.0f, (Hips_Slider.value - 1) * (1.5f - 1.0f) + 1.0f);
}
}
}
设置slider的参数 挂的预制体挂在角色的预制体身上 脚本里面找的是执行脚本 这里的应该是HipsSliderChanged()的脚本
预制体上相应的骨骼位置挂上去 (如果路径设置的正确右击可以自动将骨骼挂好)
然后运行滑动就可以看到你调的变化
场景中新增新的挂点测试