概述
点击游标移动,游标部分靠近钢筋,然后停止。然后点击主尺移动,主尺靠近钢筋然后停止,结果显示在New Text中。
首先是注意我们要测量的单位,如果比较小,那么就要改默认的接触偏移量的值,默认是0.01改为0.001,因为我们这里要精确地毫米。
卡尺的模型部分,要将两个卡角的部分分成独立的两部分,否则Mesh Collider会额外增加一条线,会影响我们做碰撞。
在钢筋上设置脚本
脚本内容如下
using UnityEngine;
using UnityEngine.UI;
public class RebarCollider : MonoBehaviour
{
public Text reading;
public GameObject startCalibration;
public GameObject endCalibration;
public bool cursorMoveFlag = false;
public bool mainMoveFlag = false;
public Rigidbody cursorRigidbody;
public Rigidbody mainRigidbody;
public float speed = 0.1f;
public void setMainMoveFlag()
{
mainMoveFlag = true;
}
public void setCursorMoveFlag()
{
cursorMoveFlag = true;
}
private void OnCollisionEnter(Collision collision)
{
Debug.Log("OnCollisionEnter--------"+collision.gameObject.name);
if (collision.gameObject.CompareTag("CursorClaw"))
{
cursorMoveFlag = false;
}else if (collision.gameObject.CompareTag("MainClaw"))
{
mainMoveFlag = false;
}
}
private void FixedUpdate()
{
if (cursorMoveFlag)
{
cursorRigidbody.velocity = Vector3.forward * speed;
}else if (mainMoveFlag)
{
mainRigidbody.velocity = -Vector3.forward * speed;
}
float res = (startCalibration.transform.position - endCalibration.transform.position).magnitude;
reading.text = res.ToString();
}
}
注意卡尺卡角的rigidbody属性,我们是通过速度移动卡角,所以需要勾选is Kinematic。Collision Detection需要设置为Continuous Speculative否则速度太快会穿模。Constraints需要都勾选否则卡角会脱离父组件。
最后计算卡尺的读数,需要设置一个开始位置和结束位置,然后计算两个位置的距离大小就是卡尺的最后读数。
精度问题:
物体的原始尺寸
提高精度需要调整的位置
调整接触偏移量
调整碰撞体,尽量贴合物体表面,发现之前自动生成的Mesh collider没有完全靠近,自己换成后Box collider。
测量点的开始与结束位置,调整尽量到一个水平线上,尽量减少误差。
最后的结果,误差为0.00001
官方已提供Demo和新的组件来解决这个问题,机械臂 Cool。
Articulations - Unity 手册
官方Demo
https://github.com/Unity-Technologies/articulations-robot-demo
最后
以上就是背后发箍为你收集整理的unity游标卡尺测量的全部内容,希望文章能够帮你解决unity游标卡尺测量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复