Unity头发飘动效果

Unity头发飘动

  • 介绍
    • 动作做头发飘动
    • 头发骨骼绑定模拟物理组件
  • UnityChan插件下载
  • UnityChan具体用法
    • 确定人物是否绑定好骨骼节点(要做的部位比如头发等)
    • 给人物添加SpringManager骨骼管理器
    • 给骨骼节点添加SpringBone
      • 这里给每个头发骨骼都添加上SpringBone。
      • 最后一个节点的处理
        • 这是我原本的最后一个节点
        • 这是我创建的最后一个节点![在这里插入图片描述](https://img-blog.csdnimg.cn/625e4599a9e94f58939b0adf567778b1.png)
      • 子节点设置
        • 参数含义
    • 碰撞设置
    • SpringManager设置
  • 最终效果

介绍

Unity中头发飘动其实有很多种方式,如果是想做的生动一点那么还是需要用到模拟物理这种方式,如果不要求的生动那其实可以在做动作的时候就把头发给做上飘动。这里不光可以做头发飘动部位的晃动,裙子的布料也是可以用这个插件来实现的。

动作做头发飘动

优点:是程序不需要写逻辑和操作,只需要播放对应的动作,将动作做好融合就可以做出效果;
缺点:是这种方法做出来的效果肯定是固定的不可能很飘逸和带有随机性的飘动;

头发骨骼绑定模拟物理组件

原理:这里原理就是将骨骼和子骨骼都绑定,然后人物产生位移的时候,父骨骼带动子骨骼位移,就是父级向下传导上层的力并且做对应的衰减或者增加;
优点:是比较飘逸生动,效果肯定是比纯做动作效果要好的多;
缺点:也很明显首先操作起来要复杂一些;

  1. 动作需要把头发骨骼也给绑定好;
  2. 程序需要把骨骼和子骨骼都绑定好对应的模拟物理组件;
  3. 碰撞也要做的话需要把碰撞也绑定一下;
  4. 性能开销必然会比直接播放动作要大很多;

UnityChan插件下载

这里我使用的UnityChan这个插件去做的头发飘动,这个插件在unitystore中直接搜索UnityChan就可以直接找到,添加到自己的账号资源,然后在unity中直
接导入即可。
我这里是已经添加到我的资源中了,所以我这里是直接显示在unity中打开
在这里插入图片描述
打开Unity的Package Manager,选中我下图上方的红框选择我的资源,找到我下方的Unity-Chan! Model这个文件点击DownLoad,我这里是显示的Re-Download是因为我这里已经下载过了,我直接导入Import了。下载完记得导入。
在这里插入图片描述
这里主要用到的几个脚本
SpringManager:这个是全局控制的脚本,控制所有子骨骼;
SpringBone:这个是放在人物的头发或者其他部位骨骼上;
SpringCollider:这个是用于做部位碰撞使用的;
RandomWind:这个就是做个随机的风向的处理,辅助模拟风;

UnityChan具体用法

确定人物是否绑定好骨骼节点(要做的部位比如头发等)

这里我举个例子查看你人物头发的帮没绑定骨骼,找到你的人物模型下面头的骨骼在往下找看我下图红框的位置,如果有子节点尝试拖动子节点看看头发的蒙皮是否有变化,有的话就是头发绑定骨骼了,就可以正常的做飘动,我们人物的胸部其实也有骨骼,这里就不多展示了,原理都是一样的胸部还更加容易左才几个骨骼节点,这头发就非常多。
.在这里插入图片描述
在这里插入图片描述

给人物添加SpringManager骨骼管理器

在人物的最外层挂载SpringManager这个管理脚本用来统一管理其他挂载SpringBone的骨骼节点
在这里插入图片描述

给骨骼节点添加SpringBone

这里给每个头发骨骼都添加上SpringBone。

这里仔细看为什么为什么最下面的骨骼是没有给添加这个SpringBone,这里是因为最下面的骨骼实际不参与这个头发的运动,也就是说最下面的骨骼节点你可以尝试拖拽一下,你会发现他不会影响任何头发的蒙皮。

在这里插入图片描述

最后一个节点的处理

那这里还有一个问题就是,如果你最下面的骨骼如果是可以操作头发的,那么你需要在这个骨骼上面在创建一个空物体,顺着头发向后延伸一下。下图给举个例子怎么创建

这是我原本的最后一个节点

在这里插入图片描述

这是我创建的最后一个节点在这里插入图片描述

应该是可以看出来变化的是吧,最后面创建的其实就是顺着头发向后走了一段位移,这个位移大小可以参考该节点的父节点的位移来定,也可以根据效果去调整,其实最后一个节点不会太影响效果,所以做不做都可以。

子节点设置

这里使我们添加的SpringBone骨骼,我们需要将下图的Child的这个子节点选择一下
在这里插入图片描述
这里看我拖拽的子节点,每一个挂载SpringBone都要拖拽一下子节点,这里也就好理解为什么最后一个骨骼如果没有实际影响头发的话就不需要挂载,如果最后一根骨骼影响那么就创建一个子节点在后移一下的这两个点了。因为只要挂载SpringBone的骨骼都需要拖拽子骨骼节点,因为他这里其实是前骨骼向后传导给子骨骼的。
在这里插入图片描述
后面的头发我就不截图了以此类推直接拖拽子骨骼节点就好了。

参数含义

Child:这里我就不多说了上面也说了过了就是当前骨骼的子骨骼;
Bone Axis:骨骼的轴向;
Radius:这个是当前骨骼的大小(后面做碰撞使用);
在这里插入图片描述
Is Use Each Bone Force Settings:是否使用每个骨骼的设置
Stilffness Force:每个骨骼的任性相当于,越小会越软,越大会越硬
Drag Force:拖拽受力,这个就是拖拽人物的时候,值越小骨骼越不受影响,值越大骨骼受到影响越大
Spring Force:这个是骨骼受力的方向,x y z轴方向受力
Colliders:这个就是可碰撞的对象列表(需要挂载SpringCollider)
Debug:这个就是Scene试图是否绘制这个骨骼节点
在这里插入图片描述
ThreShold:这个值我一直使用默认的0.01,没测试出来有什么用,翻译过来是门槛的意思,这里如果我用1的话是就是没法起作用
在这里插入图片描述

碰撞设置

这里比较简单我举个例子
在头发同级这里我创建了一个Collider并且挂载上SpringCollider设置一下对应的头部绿色圆形大小即可
在这里插入图片描述
然后这里给需要做碰撞的骨骼添加一个刚才创建的碰撞器即可
在这里插入图片描述

SpringManager设置

跟着我上面操作如果你运行你会发现压根没有作用,还差一步就是需要把刚才挂载SpringBone脚本的对象拖拽到SpringManager上激活,现在挂载SpringBone脚本的骨骼实际上是还没有激活的。

如下图所示这个就是我之前挂载的SpringBone的骨骼对象,全部拖拽到这里然后在运行就有还不错的效果了,当然不同部位要求都不太一样,根据我上面的参数详细调节就能做出来不错的效果。
在这里插入图片描述
Dynamic Ratio:这个就是动画起作用还是物理起作用的一个比率,下面的Force和Drag这两个我一般保持默认,用字骨骼自己的设置。
在这里插入图片描述

最终效果

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习教程(第十六章 Linux系统启动管理)二

第十六章 Linux系统启动管理(二) 九、Linux /boot/grub/目录分析 本章第一节就已经讲过,BIOS 在进行完成系统检测之后,就会找到第一个可以启动的设备,并读取该设备的 MBR(主引导记录)以及加载…

electron使用electron-builder进行MacOS的 打包、签名、公证、上架、自动更新

一、前言 由于electron在macOS下的坑太多,本文不可能把所有的问题都列出来,也不可能把所有的解决方案贴出来;本文也不太会讲解每一个配置点为什么要这么设置的原因,因为有些点我也说不清,我尽可能会说明的。所以&…

计算机的工作原理(上)

1. 计算机发展史 计算的需求在人类的历史中是广泛存在的,发展大体经历了从一般计算工具到机械计算机到目前的电子计算机的发展历程。(以下是计算机的发展历程) 1、公元前2500 年前,算盘已经出现了;除此之外&#xff0c…

Unity protobuf中repeated转C#文件List只读问题

Unity protobuf中repeated转C#文件List只读问题 介绍问题解决方案总结 介绍 工具这里我就不多介绍了,如果有用到ProtoGen工具的可以继续看一下我后面的方法。 问题 如下图所示,我这里随便用了一个.proto文件,看下我这里面的repeated标记的…

大一C语言作业题目1

目录 字符串和字符数组? %s found的变化: 7-1 学生成绩录入及查询 学生成绩表中,一名学生的信息包含如下信息: 学号(11位)、姓名、数学成绩、英语成绩、程序设计成绩、物理成绩。 本题要求编写程序,录入N条学生的…

【Amazon 实验②】使用缓存策略及源请求策略,用于控制边缘缓存的行为及回源行为

文章目录 1. 了解缓存策略和源请求策略1.1 使用缓存键和缓存策略 实验:使用CloudFront缓存策略和缓存键控制缓存行为 接上一篇文章【Amazon 实验①】使用 Amazon CloudFront加速Web内容分发,我们现在了解和配置如何使用缓存策略及源请求策略,…

NativePHP:使用 PHP 构建桌面应用程序

PHP 在我心中占据着特殊的位置。它是我的第一份工作,我记得我在家里花了无数个小时做一些小项目。我非常想用 PHP 创建桌面应用程序,但我从来没有做到过。 现在,感谢 NativePHP,我可以了。 NativePHP 追随 Slack、Discord 和 Tre…

trino-435版本windows下源码编译

一、源码下载地址 https://github.com/trinodb/trino/tags 二、编译环境及工具准备 1、maven &#xff08;1&#xff09;版本&#xff1a;3.6.3 &#xff08;2&#xff09;settings.xml配置 <?xml version"1.0" encoding"UTF-8"?> <settin…

基于Vite+Vue3 给项目引入Axios

基于ViteVue3 给项目引入Axios,方便与后端进行通信。 系列文章指路&#x1f449; 系列文章-基于Vue3创建前端项目并引入、配置常用的库和工具类 文章目录 安装依赖新建src/config/config.js 用于存放常用配置进行简单封装解决跨域问题调用尝试 安装依赖 npm install axios …

双向数据绑定是什么

一、什么是双向绑定 我们先从单向绑定切入单向绑定非常简单&#xff0c;就是把Model绑定到View&#xff0c;当我们用JavaScript代码更新Model时&#xff0c;View就会自动更新双向绑定就很容易联想到了&#xff0c;在单向绑定的基础上&#xff0c;用户更新了View&#xff0c;Mo…

SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载

作者&#xff1a;yx 文章目录 一、发布服务二、代码加载三、结果展示 一、发布服务 SuperMap iServer支持将地图发布为ArcGIS REST地图服务&#xff0c;您可以在发布服务时直接勾选ArcGIS REST地图服务&#xff0c;如下图所示&#xff1a; 也可以在已发布的地图服务中&#x…

linux分辨率添加

手动添加分辨率 注&#xff1a;添加分辨率需要显卡驱动支持&#xff0c;若显卡驱动有问题&#xff0c;则不能添加 可通过 xrandr 结果判断 # xrandr 若图中第二行” eDP“ 显示为 ” default “ &#xff0c;则显卡驱动加载失败&#xff0c;不能添加分辨率 1. 添加分辨率 # …

PHP下载安装以及基本配置

目录 引言 官网 下载 配置 1. 鼠标右键“此电脑”>“属性” 2. 打开高级系统设置 3. 打开环境变量 4. 双击系统变量中的path 5. 新建新的path 6. 将刚刚安装的位置加入环境变量 7. 检查是否安装成功 引言 PHP&#xff08;"PHP: Hypertext Preprocessor"…

零基础学C语言——数组

这是一个C语言系列文章&#xff0c;如果是初学者的话&#xff0c;建议先行阅读之前的文章。笔者也会按照章节顺序发布。 上一篇我们讨论过函数&#xff0c;其中涉及到了一些数组和指针&#xff0c;本篇详细说明数组。 数组定义 **数组是一种集合结构&#xff0c;与数学种谈到…

电脑完全重装教程——原版系统镜像安装

注意事项 本教程会清除所有个人文件 请谨慎操作 请谨慎操作 请谨慎操作 前言 本教程是以系统安装U盘为介质进行系统重装操作&#xff0c;照着流程操作会清除整个硬盘里的文件&#xff0c;请考虑清楚哦&#xff5e; 有些小伙伴可能随便在百度上找个WinPE作为启动盘就直接…

前端性能优化六:css阻塞

1. css加载会阻塞DOM树的解析和渲染吗? (1). html代码: <!DOCTYPE html> <html lang"en"><head><style>h1 {color: red !important}</style><script>function h () {console.log(document.querySelectorAll(h1))}setTimeout(…

Leetcode—445.两数相加II【中等】

2023每日刷题&#xff08;六十七&#xff09; Leetcode—445.两数相加II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2…

[每周一更]-(第38期):Go常见的操作消息队列

在Go语言中&#xff0c;常见的消息队列有以下几种&#xff1a; RabbitMQ&#xff1a;RabbitMQ是一个开源的AMQP&#xff08;高级消息队列协议&#xff09;消息代理软件&#xff0c;用于支持多种编程语言&#xff0c;包括Go语言。RabbitMQ提供了可靠的消息传递机制和灵活的路由…

开源 AI 新秀崛起:Bittensor 更像是真正的“OpenAI”

强大的人工智能正在飞速发展&#xff0c;而完全由 OpenAI、Midjourney、Google&#xff08;Bard&#xff09;这样的少数公司控制 AI 不免让人感到担忧。在这样的背景下&#xff0c;试图用创新性解决方案处理人工智能中心化问题、权力集中于少数公司的 Bittensor&#xff0c;可谓…

让生活更智能,P1600边缘智能网关带你进入智能家居新时代

一、什么是P1600边缘智能网关&#xff1f; 在科技日新月异的今天&#xff0c;我们的生活已经被各种智能产品所包围。而在这个智能化的浪潮中&#xff0c;P1600边缘智能网关以其独特的优势&#xff0c;成为了智能家居的重要组成部分。那么&#xff0c;什么是P1600边缘智能网关呢…