<Unity> 捏捏 测试

项目需要捏身体搞了一个简单的测试,只是测试效果,不做正式使用
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()的脚本
在这里插入图片描述
预制体上相应的骨骼位置挂上去 (如果路径设置的正确右击可以自动将骨骼挂好)
在这里插入图片描述然后运行滑动就可以看到你调的变化

场景中新增新的挂点测试
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sunGZ123456/article/details/123924067