Unity实现不倒翁
Unity实现不倒翁
Unity 实现不倒翁
不倒翁插件下载地址:
这是一个下载地址
https://www.aigei.com/item/zekpackage_unit.html
请使用URP渲染管线创建工程,导入此插件,有问题评论区告诉我。
备用下载地址:B站
using UnityEngine;[RequireComponent(typeof(Rigidbody))]
public class RolyPoly : MonoBehaviour
{[Header("重心设置")][Tooltip("重心高度偏移(负值降低重心)")]public float centerOfMassOffset = -0.25f;[Header("物理参数")][Range(0.1f, 10f)] public float angularDrag = 2f;[Range(0.1f, 10f)] public float maxAngularVelocity = 8f;private Rigidbody rb;private Vector3 originalCenterOfMass;[Header("摇摆优化")]public float stabilizationForce = 5f;/* 参数、作用、推荐值
centerOfMassOffset 重心越低越稳定 (-0.5, -1.5)
angularDrag 旋转阻力,值越大停止越快 (1.0, 3.0)
maxAngularVelocity 最大旋转速度 (5, 10)
stabilizationForce 主动稳定力度 (2, 5)
*/void Start(){rb = GetComponent<Rigidbody>();rb.maxAngularVelocity = maxAngularVelocity;rb.angularDrag = angularDrag;// 设置重心originalCenterOfMass = rb.centerOfMass;AdjustCenterOfMass();}void AdjustCenterOfMass(){// 降低重心(Y轴负方向)Vector3 newCenter = originalCenterOfMass;newCenter.y += centerOfMassOffset;rb.centerOfMass = newCenter;}void FixedUpdate(){// 增加稳定性if (rb.velocity.magnitude < 0.1f){Vector3 uprightDirection = Vector3.up;Vector3 currentUp = transform.up;// 计算恢复力矩Vector3 torque = Vector3.Cross(currentUp, uprightDirection);rb.AddTorque(torque * stabilizationForce, ForceMode.Acceleration);}}// 可选:在编辑器中可视化重心void OnDrawGizmosSelected(){if (!Application.isPlaying) return;Gizmos.color = Color.red;Gizmos.DrawSphere(transform.TransformPoint(rb.centerOfMass), 0.1f);}
}