UnityVR--机械臂场景2-机械臂

机械臂的每一个自由度呈层级关系,也就是较末端的自由度跟随父自由度一起移动。

UnityVR--机械臂场景2-机械臂_第1张图片 UnityVR--机械臂场景2-机械臂_第2张图片

 因此,我们在控制某个自由度运动以前,要先找出这个自由度的旋转中心,定义旋转约束和旋转步长(每按一次按钮,自由度旋转的角度)。

另外,机械臂的每一个部件的坐标,需要在其他软件或控件中调整和重新定义其位置。

1. 找到需要测试自由度的节点,查看一下它的旋转轴。以Point005为例,选中后在Inspector面板中取消勾选,

 UnityVR--机械臂场景2-机械臂_第3张图片 UnityVR--机械臂场景2-机械臂_第4张图片

 需要将场景坐标切换为“Local”,之后可以在场景中看到这个自由度的旋转轴方向(目前是蓝色的z轴)。

UnityVR--机械臂场景2-机械臂_第5张图片  UnityVR--机械臂场景2-机械臂_第6张图片

 2. 在MyScript文件夹中新建一个Test.cs脚本测试一下,在Update()方法中写入:

transform.Rotate(new Vector3(0,0,0.1f));

挂载到Point005节点上,运行测试这个旋转坐标是否正确。

 3. 第一个自由度关节使用UI控件中的“Link1”的按钮来控制,在这个关节的脚本中需要载入。

脚本RobotLink1.cs分段解释

第一段:定义变量

UnityVR--机械臂场景2-机械臂_第7张图片

 第二段:Start() 初始化各种变量,并且记录这个关节最初的旋转值,以便于回零。

UnityVR--机械臂场景2-机械臂_第8张图片

 第三段:当监听到向左的按钮被按下时,调用onLink1ButtonLeft()方法。其中,rotatedAngle是关节已旋转过的距离,它需要与约束值AngleRange比较,判断是否超过了约束。并且已旋转过的距离还要再与下一步要旋转的距离RotateStep叠加,判断再次旋转一个步长后,是否还在约束角度内,如果这两者都为真,才会进入if循环,否则提示“Link1超过范围了”。

UnityVR--机械臂场景2-机械臂_第9张图片

 第四段:当监听到向右的按钮被按下时,调用onLink1Buttonright()方法。与前一段内容基本相同,不同的是旋转的角度互为相反数。

UnityVR--机械臂场景2-机械臂_第10张图片

 第五段:回零。将Start()中获取到的初始角度值赋给现在的方向。

UnityVR--机械臂场景2-机械臂_第11张图片

4. 以上为机械臂的其中一个自由度控制方法。其他自由度可以使用同样的脚本来控制,有所区别的就是机械臂的转动坐标轴需要进行第2步中的测试。

你可能感兴趣的:(UnityVR--机械臂场景,unity,vr)