使用编辑器代码给模型添加uLipSync组件

由于模型不停更改,需要频繁手动添加uLipSync组件,花时间写了编辑器代码去处理

using uLipSync;
using UnityEditor;
using UnityEditor.Events;
using UnityEngine;
using static uLipSync.uLipSyncBlendShape;/// <summary>
/// 模型添加uLipSync组件
/// </summary>
public class AdduLipSyncComponent : EditorWindow
{private GameObject selectedObject;private AudioSource audioSource;private SkinnedMeshRenderer skinnedMeshRenderer;/// <summary>/// 男的/// </summary>private bool isMale = false;[MenuItem("Tools/模型添加uLipSync组件")]public static void ShowWindow(){GetWindow<AdduLipSyncComponent>("模型添加uLipSync组件");}private void OnGUI(){GUILayout.Label("选择模型:", EditorStyles.boldLabel);selectedObject = EditorGUILayout.ObjectField(selectedObject, typeof(GameObject), true) as GameObject;EditorGUILayout.Space();GUILayout.Label("选择音源:", EditorStyles.boldLabel);audioSource = EditorGUILayout.ObjectField(audioSource, typeof(AudioSource), true) as AudioSource;EditorGUILayout.Space();GUILayout.Label("选择口形动画SkinnedMeshRenderer:", EditorStyles.boldLabel);skinnedMeshRenderer = EditorGUILayout.ObjectField(skinnedMeshRenderer, typeof(SkinnedMeshRenderer), true) as SkinnedMeshRenderer;EditorGUILayout.Space();isMale = EditorGUILayout.Toggle("男的", isMale);EditorGUILayout.Space();if (GUILayout.Button("添加组件") && selectedObject != null && audioSource != null && skinnedMeshRenderer != null){AddComponent();}EditorGUILayout.Space();if (GUILayout.Button("运行")){EditorApplication.isPlaying = true;}}void AddComponent(){//给音频组件添加uLipSyncAudioSourceuLipSyncAudioSource uLipSyncAudioSource = audioSource.gameObject.GetComponent<uLipSyncAudioSource>();if (uLipSyncAudioSource != null){DestroyImmediate(uLipSyncAudioSource);}uLipSyncAudioSource = audioSource.gameObject.AddComponent<uLipSyncAudioSource>();uLipSyncBlendShape uLipSyncBlendShape = selectedObject.GetComponent<uLipSyncBlendShape>();if (uLipSyncBlendShape != null){DestroyImmediate(uLipSyncBlendShape);}uLipSyncBlendShape = selectedObject.AddComponent<uLipSyncBlendShape>();uLipSyncBlendShape.skinnedMeshRenderer = skinnedMeshRenderer;uLipSyncBlendShape.minVolume = -3f;uLipSyncBlendShape.maxVolume = -2f;uLipSyncBlendShape.smoothness = 0.05f;#region AIUEON-BlendShapeInfo A = new BlendShapeInfo();A.phoneme = "A";A.maxWeight = 1f;A.index = 1;uLipSyncBlendShape.blendShapes.Add(A);BlendShapeInfo I = new BlendShapeInfo();I.phoneme = "I";I.maxWeight = 1f;I.index = 3;uLipSyncBlendShape.blendShapes.Add(I);BlendShapeInfo U = new BlendShapeInfo();U.phoneme = "U";U.maxWeight = 1f;U.index = 5;uLipSyncBlendShape.blendShapes.Add(U);BlendShapeInfo E = new BlendShapeInfo();E.phoneme = "E";E.maxWeight = 1f;E.index = 2;uLipSyncBlendShape.blendShapes.Add(E);BlendShapeInfo O = new BlendShapeInfo();O.phoneme = "O";O.maxWeight = 1f;O.index = 4;uLipSyncBlendShape.blendShapes.Add(O);BlendShapeInfo N = new BlendShapeInfo();N.phoneme = "N";N.maxWeight = 1f;uLipSyncBlendShape.blendShapes.Add(N);BlendShapeInfo ms = new BlendShapeInfo();ms.phoneme = "-";ms.maxWeight = 1f;uLipSyncBlendShape.blendShapes.Add(ms);#endregionuLipSync.uLipSync uls = selectedObject.GetComponent<uLipSync.uLipSync>();if (uls != null){DestroyImmediate(uls);}uls = selectedObject.AddComponent<uLipSync.uLipSync>();uls.outputSoundGain = 1f;uls.audioSourceProxy = uLipSyncAudioSource;
#if UNITY_WEBGLuls.autoAudioSyncOnWebGL = true;uls.audioSyncOffsetTime = 0f;
#endifUnityEventTools.AddPersistentListener(uls.onLipSyncUpdate, uLipSyncBlendShape.OnLipSyncUpdate);if (isMale){uls.profile = AssetDatabase.LoadAssetAtPath<Profile>("Assets/uLipSync/Assets/Profiles/uLipSync-Profile-Sample-Male.asset");}else{uls.profile = AssetDatabase.LoadAssetAtPath<Profile>("Assets/uLipSync/Assets/Profiles/uLipSync-Profile-Sample-Female.asset");}}
}

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/696564.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaEE之线程(4)——线程安全、线程安全的原因,synchronized关键字

前言 在本栏的前面的内容中&#xff0c;我们介绍了线程的创建、Thread 类及常见方法、线程的状态&#xff0c;今天我们来介绍一下关于线程的另一个重点知识——线程安全。 一、线程安全 基本概念&#xff1a; 线程安全的确切定义是复杂的&#xff0c;但我们可以这样认为&…

C++语言的字符数组

存放字符数据的数组是字符数组&#xff0c;字符数组中的一个元素存放一个字符。字符数组具有数组的共同属性。 1. 声明一个字符数组 char c[5]; 2. 字符数组赋值方式 &#xff08;1&#xff09;为数组元素逐一赋值 c[0]H c[1]E c[2]L c[3]L c[4]O &#xff08;2&…

C语言学习【C语言基本数据类型二】

C语言学习【C语言基本数据类型二】 _Bool类型 C99标准添加了_Bool类型&#xff0c;用于表示布尔值&#xff0c;即逻辑值true和false&#xff0c;原则上仅占用1位存储空间&#xff1b; float、double和long double 记数法示例 C标准规定&#xff0c;float类型必须至少能表示…

2024年去除视频水印的5种方法

如果你从事电影剪辑或者视频编辑工作&#xff0c;你经常需要从优酷、抖音、TikTok下载各种视频片段……。 通常这些视频带有水印和字幕。一些免费软件如CapCut、canva、Filmora也会给你制作的视频打上水印&#xff0c;这些水印嵌入在视频内部。 2024年去除视频水印的5种方法 …

EdgeOne 免费证书快速实现网站 HTTPS 访问

在当今互联网环境下&#xff0c;HTTPS访问已经成为现代网站的必备功能。HTTPS 访问不仅能够更有效地保障用户在访问到网站时的数据安全传输&#xff0c;防止信息泄露、消息劫持等问题&#xff0c;在搜索引擎中&#xff0c;未实现 HTTPS 还会被浏览器提示为不安全网站&#xff0…

迪安诊断数智中心战略与PMO负责人徐黎明受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 迪安诊断技术集团股份有限公司数智中心战略与PMO负责人徐黎明先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“软件研发项目管理指标体系建设实践”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; …

C# WinForm —— 19 PictureBox 介绍

1. 简介 PictureBox 主要用于显示图像&#xff0c;也可以给它注册单击事件&#xff0c;来把它变成一个按钮 2. 常用属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到,一般以 pixB 开头BackColor控件的背景色BackgroundImage控件的背景图像BorderStylePictur…

NSSCTF | [SWPUCTF 2021 新生赛]Do_you_know_http

打开题目后&#xff0c;显示&#xff1a;“Please use WLLM browser!” 说明这里需要伪装为名为WLLM的浏览器&#xff0c;直接Burpsuite抓包 我们需要修改的地方是上面的User-Agent 用户代理&#xff08;User Agent&#xff0c;简称 UA&#xff09;&#xff0c;是一个特殊字符…

鸿蒙系统编译方式

鸿蒙系统编译 编译原理编译方式概述hb编译ohos-buildhb安装编译使用build脚本hpmhpm介绍编译举例说明综合应用举例虚拟机中编译docker中使用hpm编译编译原理 编译构建指导:https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/subsystems/subsys-build-all.md,文档介绍…

VMware虚拟机故障:“显示指定的文件不是虚拟磁盘“,处理办法

一、故障现象 由于虚拟机宕机&#xff0c;强制重新启动虚拟机后显示错误&#xff0c;没有办法启动虚拟机。 虚拟机有快照&#xff0c;执行快照还原&#xff0c;结果也不行&#xff0c;反复操作&#xff0c;在虚拟机文件目录出现很多莫名文件 二、故障原因 根据故障提示&#…

计算机视觉的应用30-基于深度卷积神经网络CNN模型实现物体表面缺陷检测技术的项目

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用30-基于深度卷积神经网络CNN模型实现物体表面缺陷检测技术的项目主要包括&#xff1a;物体表面缺陷检测技术项目介绍&#xff0c;数据构造&#xff0c;模型介绍。 物体表面缺陷检测技术是工业自动化…

识别AI论文生成内容,降低论文高AI率

AI写作工具能帮我们在短时间内高效生成一篇毕业论文、开通报告、文献综述、任务书、调研报告、期刊论文、课程论文等等&#xff0c;导致许多人开始使用AI写作工具作为撰写学术论文的辅助手段。而学术界为了杜绝此行为&#xff0c;开始使用AIGC检测系统来判断文章是由AI生成还是…