[Unity3D--自由观察模型]模型自动旋转+触屏旋转和缩放

发布时间:2023-06-21 18:19:27阅读:218

话不多说,先看效果!

编辑

实践步骤

创建3D模型,并将脚本放置模型上

注意:如果最终你控制模型时,发现旋转的中心位置不满意,这里我提供一个方案可以实现任意调整模型中心位置,即创建一个Empty对象,随后将想控制的模型置为Empty对象的子对象,最后调整Empty对象和模型对象的相对位置即可,对应的脚本也需要放在Empty对象上

可能有些小伙伴还是不明白上面的意思(懂的小伙伴这里可以跳过啦),比如现在有一个可乐瓶模型,我将可乐瓶的位置设置为(0,0,0),将Empty对象位置设置为(0,0.15,0),这样就能实现将旋转的中心从可乐瓶的中间位置移动到它瓶底位置

编辑

编辑

最后调整角度即可

编辑

脚本代码

#自动旋转

usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassautozhuan:MonoBehaviour{publicfloatspeed=90f;//StartiscalledbeforethefirstframeupdatevoidStart{}//UpdateiscalledonceperframevoidUpdate{transform.Rotate(Vector3.up*Time.deltaTime*speed);}}

#触控实现旋转缩放

usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclasssuofang:MonoBehaviour{privateToucholdTouch1;//上次触摸点1(手指1)privateToucholdTouch2;//上次触摸点2(手指2)voidUpdate{//没有触摸,就是触摸点为0if(Input.touchCount<=0){return;}//单点触摸,水平上下旋转if(Input.touchCount==1){Touchtouch=Input.GetTouch(0);Vector2deltaPos=touch.deltaPosition;transform.Rotate(Vector3.down*deltaPos.x,Space.World);//绕Y轴进行旋转transform.Rotate(Vector3.right*deltaPos.y,Space.World);//绕X轴进行旋转,下面我们还可以写绕Z轴进行旋转}//多点触摸,放大缩小TouchnewTouch1=Input.GetTouch(0);TouchnewTouch2=Input.GetTouch(1);//第2点刚开始接触屏幕,只记录,不做处理if(newTouch2.phase==TouchPhase.Began){oldTouch2=newTouch2;oldTouch1=newTouch1;return;}//计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型floatoldDistance=Vector2.Distance(oldTouch1.position,oldTouch2.position);floatnewDistance=Vector2.Distance(newTouch1.position,newTouch2.position);//两个距离之差,为正表示放大手势,为负表示缩小手势floatoffset=newDistance-oldDistance;//放大因子,一个像素按0.01倍来算(100可调整)floatscaleFactor=offset/75f;Vector3localScale=transform.localScale;Vector3scale=newVector3(localScale.x+scaleFactor,localScale.y+scaleFactor,localScale.z+scaleFactor);//在什么情况下进行缩放if(scale.x>=0.5f&&scale.y<=2f){transform.localScale=scale;}//记住最新的触摸点,下次使用oldTouch1=newTouch1;oldTouch2=newTouch2;}}

排行榜