private Vector3 penPos ,hoverDis ;
//GlobeData._RightRaycaster.BreakPoints[1] 射线笔检测到物体的射线碰撞点
private void onRightRightPressDown()
{
//记录射线笔的端点 即笔头 作为拉远、拉近基准点
penPos = GlobeData._RightRaycaster.BreakPoints[0];
//计算当前笔头到碰撞点之间的距离作为拉远、拉近基准距离
hoverDis = Vector3.Distance(GlobeData._RightRaycaster.BreakPoints[0], GlobeData._RightRaycaster.BreakPoints[1]);
}
//penPos 笔按钮按下时记录当前笔的端点位置 作为基准点
//GlobeData._RightRaycaster.BreakPoints[0] 为笔的端点位置
//计算方向向量 笔按下持续检测
private void onRightRightPress()
{
Vector3 di = (GlobeData._RightRaycaster.BreakPoints[0] - penPos).normalized;
//计算触控笔在缩放物体时是向前还是向后移动
//dir>0 为相同方向,dir<0为相反方向
float dir = Vector3.Dot(penPos, di);
if (dir == 0)
{
return;
}
//计算笔的是拉远还是拉近
dir = dir / Mathf.Abs(dir);(1拉远 -1拉近)
//计算基准点 和笔当前的端点的距离 并 和dir运算
float dis = dir * Vector3.Distance(penPos, GlobeData._RightRaycaster.BreakPoints[0]);
//hoverDis 笔按下时记录笔检测到物体,并计算笔端点和物体的距离 作为基准距离
//(dis + hoverDis) 根据拉远、拉近计算出基于 基准距离是增加了还是减少了
//获取比值作为缩放的百分比
float v = (dis + hoverDis) / hoverDis;
transform.localScale = Vector3.Lerp(transform.localScale, ClampVec(minScale, hoverScale * v,maxScale), Time.deltaTime * speed);
}
private float minScale=0.3f;
private float maxScale=3f;
private Vector3 ClampVec(float min, Vector3 v, float max)
{
float newV = Mathf.Clamp(v.x, min, max);
return new Vector3(newV, newV, newV);
}
unity记录笔发射线 拉远拉近 方向
最新推荐文章于 2022-07-25 23:57:02 发布