Unity工业机器IK绑定及其运动逻辑控制

您所在的位置:网站首页 unity机械臂 Unity工业机器IK绑定及其运动逻辑控制

Unity工业机器IK绑定及其运动逻辑控制

2024-06-20 19:56| 来源: 网络整理| 查看: 265

声明:本文为原创文章,转载请注明出处。

实现效果:

IK关节插件:https://download.csdn.net/download/ThreePointsHeat/12465792

工业机器油缸绑定,控制其关节运动,使用纯代码来实现不容易搞定,所以在unity商店买了一套IK插件来实现功能。

首先需要在外油缸处添加两个组件Rotation Limt Hinge 和 CCDIK。

Rotation Limt Hinge:

Axis:用来控制油缸旋转方向。

Min:油缸旋转最小值范围。

Max:油缸旋转最大值范围。(一般设置为-180 ~ 180)也就是0 ~ 360°

CCDIK:

Fix Transforrms:修复自身(不要勾选)

Target:目标对象(两根互相关联运动油缸,把另一根油缸的旋转父物体拖进去)

Bones:骨骼(把当前旋转父物体和其子物体拖进去)

当两跟相互关联运动的油缸骨骼IK都绑定好之后,就可以开始写运动逻辑代码了,代码如下:

    ///     /// 车辆关节运动逻辑控制     ///     private void OnJointSport()     {         if (Input.GetKey(KeyCode.Alpha1) || Input.GetKey(KeyCode.Keypad1))         {             if (Input.GetKey(KeyCode.PageUp))             {                 temp_1 = Joints[0].localEulerAngles;                 temp_1 = EulerTo180(temp_1, "z");                 if (temp_1.z < 38)                 {                     temp_1 += Vector3.forward * Time.fixedDeltaTime * Speed;                 }                 Joints[0].localEulerAngles = temp_1;             }             else if (Input.GetKey(KeyCode.PageDown))             {                 temp_1 = Joints[0].localEulerAngles;                 temp_1 = EulerTo180(temp_1, "z");                 if (temp_1.z > 0)                 {                     temp_1 -= Vector3.forward * Time.fixedDeltaTime * Speed;                 }                 Joints[0].localEulerAngles = temp_1;             }         }     }

 

///     /// 控制油缸运动逻辑     ///     /// 油缸旋转     /// 旋转轴     ///     private Vector3 EulerTo180(Vector3 e, string dir)     {         switch (dir)         {             case "x":                 if (e.x > 180f)                 {                     e -= Vector3.right * 360f;                 }                 else if (e.x < -180f)                 {                     e += Vector3.right * 360f;                 }                 break;             case "y":                 if (e.y > 180f)                 {                     e -= Vector3.up * 360f;                 }                 else if (e.y < -180f)                 {                     e += Vector3.up * 360f;                 }                 break;             case "z":                 if (e.z > 180f)                 {                     e -= Vector3.forward * 360f;                 }                 else if (e.z < -180f)                 {                     e += Vector3.forward * 360f;                 }                 break;             default: break;         }         return e;     }

 

如有疑问,请私信。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3