• unity模型制作(终章)


            在前六章模型绘制的基础上,加一些几何算法,很容易制作出不同样式的模型,例如下图中的几种模型:直梯、曲梯、各种屋顶等等。

             不过最终章主要想讲一下柔体的绘制:所谓柔体,其实就是物体在受力的作用时,会产生形变,看起来比较柔软。而产生形变的过程则是柔体的每个受力点,在每个时刻随着力的作用,发生形状、位置上的改变,从而整体看起来具备柔体效果。

            简单点讲:把柔体看做若干个点组成的面,每个点受力发生改变,物体也因此改变。

            这里做个简单的demo,做一块布料,实现思路:
            1.做一根上端固定的弹力线,线有5个节点彼此相连:

             2.做五条这样的线连成一片布料:

            

    关键代码:

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using MeshMaker.Utility;
    5. using System;
    6. [Serializable]
    7. public class ClothNode : MonoBehaviour
    8. {
    9. public ClothNode lastNode;//前节点
    10. public bool isStatic = true;
    11. public float hook = 10;//虎克系数
    12. public float g = 10;//中立
    13. private float lastOraginDis;//前节点初始距离
    14. private void Start()
    15. {
    16. if(lastNode != null) lastOraginDis = Vector3.Distance(transform.position, lastNode.transform.position);
    17. }
    18. public void SetLast(ClothNode node)
    19. {
    20. lastNode = node;
    21. }
    22. // Update is called once per frame
    23. public void Update()
    24. {
    25. if(!isStatic) AddForce();
    26. }
    27. public void SetStatic(bool s) {
    28. isStatic = s;
    29. }
    30. public void SetInfo(bool isStatic,float hook, float g) {
    31. this.isStatic = isStatic;
    32. this.hook = hook;
    33. this.g = g;
    34. }
    35. public void AddForce() {
    36. Vector3 delta = Vector3.zero;
    37. Vector3 detaG = Vector3.zero;
    38. detaG = g * Vector3.up;
    39. delta -= detaG;
    40. if (lastNode != null)
    41. {
    42. var dir = (lastNode.transform.position - transform.position).normalized;
    43. float curDis = Vector3.Distance(transform.position, lastNode.transform.position);
    44. float rate = (curDis / lastOraginDis) - 1;
    45. Vector3 detaA = Vector3.zero;
    46. if (rate > 0)
    47. {
    48. float power = hook * rate;//弹力
    49. float a = power;//加速度
    50. detaA = a * dir;
    51. }
    52. delta += detaA ;
    53. }
    54. transform.position += delta * Time.deltaTime;
    55. }
    56. private void OnDrawGizmos()
    57. {
    58. Gizmos.color = new Color(0, 1, 1, 1);
    59. Gizmos.DrawCube(transform.position, Vector3.one * 0.1f);
    60. }
    61. }

            ClothNode是节点,isStatic为true的点是静态点,不受力的作用,在Start()记录初始距离,后面根据距离变化来计算,效果:

    unity布料演示

            

            这种斗篷式布料是柔体中比较简单的一种,各位大佬可以试试添加不同的作用力实现不同的柔体效果。

            后序:本章节(Unity模型制作)就此结束,感谢支持!

            源码资源:MeshMaker:Unity模型绘制工具-Unity3D文档类资源-CSDN下载

            

  • 相关阅读:
    Prometheus 简介
    php-fpm与Nginx运行常见错误说明
    HTTP 优缺点
    文字转语音朗读如何操作?手把手教你如何将文字转语音
    latex,没有边框的表格
    SpringBoot3分库分表
    Centos7安装Mysql8
    2023年中国汽车覆盖件模具竞争格局、市场规模及行业需求前景[图]
    并发原子类
    JVM:类加载的双亲委派机制
  • 原文地址:https://blog.csdn.net/u014261855/article/details/127635643