手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

Unity LineRenderer 之 鼠标轨迹记录和拖尾实现

时间:2024-10-24 00:57:58

Unity LineRenderer 之 鼠标轨迹记录和拖尾实现。本节介绍,在Unity开发中,记录鼠标在屏幕上的点的轨迹,并实现拖尾效果的简单案例,具体如下

Unity LineRenderer 之 鼠标轨迹记录和拖尾实现

工具/原料

Unity

LineRenderer

一、知识要点

1、本届案例实在透视摄像机下获谀薜频扰得鼠标的屏幕坐标转为世界坐标,鼠标的屏幕坐标要做调整,原理可参见之前的百度经验《Unity 注意事项 之 屏幕坐标转世界坐标的注意》(链接如下),若已有了解,可忽略此

二、LineRenderer 之 鼠标轨迹记录和拖尾实现

1、打开Unity,新建一个空工程,注意,此时摄像机的透视摄像机,具体如下图

Unity LineRenderer 之 鼠标轨迹记录和拖尾实现

2、在工程中,导入一个图片,后期作为材质贴图使用,具体如下图

Unity LineRenderer 之 鼠标轨迹记录和拖尾实现

3、新建一个材质“Material”,其中“Shader”改为“Paticle/Additive”(去掉贴图的背景),把导入的贴图赋予材质,具体如下图

Unity LineRenderer 之 鼠标轨迹记录和拖尾实现

4、在场景中,新建一个“GameObject”,并添加一个“LineRenderer”盲褓梆尺组件,新建的材质赋给“LineRenderer”,并设置点的个数为10个,其他设置具体如下图

Unity LineRenderer 之 鼠标轨迹记录和拖尾实现

5、给“GameObject”添加一个脚本“MouseTrack”,具体如下图

Unity LineRenderer 之 鼠标轨迹记录和拖尾实现

6、编辑脚本“MouseTrack”,思路大概如下:首先设置变量,然后在Update检测鼠标按下抬起,接着记录鼠番舸榆毛标坐标,最后把保存的点赋给“LineRenderer”即可。(需要注意的是:透视摄像机下的鼠标点屏幕转世界坐标时,需要设一下Z值,正交摄像机则不需要),具体的代码和代码说明如下图

Unity LineRenderer 之 鼠标轨迹记录和拖尾实现
Unity LineRenderer 之 鼠标轨迹记录和拖尾实现

7、“MouseTrack”脚本的具体内容如下;usingUnityEngine;publicclassMouseTrack:罄休卦咦MonoBehaviour{///<summary> ///获取LineRenderer组件 ///</summary> [Header("获得LineRenderer组件")] publicLineRendererlineRenderer;privateVector3[]mouseTrackPositions=newVector3[10]; privateVector3headPosition; privateVector3lastPosition; privateintpositionCount=0; [Header("设置多远举例记录一个位置")] publicfloatdistanceOfPositions=0.01f;privateboolfirstMouseDown=false; privateboolmouseDown=false;//Usethisforinitialization voidStart(){ } //Updateiscalledonceperframe voidUpdate(){if(Input.GetMouseButtonDown(0)){firstMouseDown=true; mouseDown=true; } if(Input.GetMouseButtonUp(0)){mouseDown=false; Debug.Log("mouseDown:"+mouseDown.ToString()); }OnDrawLine();firstMouseDown=false; }privatevoidOnDrawLine(){ if(firstMouseDown==true){positionCount=0; headPosition=Camera.main.ScreenToWorldPoint(Input.mousePosition+newVector3(0,0,10)); lastPosition=headPosition;}if(mouseDown==true){headPosition=Camera.main.ScreenToWorldPoint(Input.mousePosition+newVector3(0,0,10));if(Vector3.Distance(headPosition,lastPosition)>distanceOfPositions){SavePosition(headPosition); positionCount++; }lastPosition=headPosition; }else{ mouseTrackPositions=newVector3[10];}SetLineRendererPosition(mouseTrackPositions); }privatevoidSavePosition(Vector3pos){ pos.z=0; if(positionCount<=9){for(inti=positionCount;i<10;i++){mouseTrackPositions[i]=pos; } }else{ for(inti=0;i<9;i++){mouseTrackPositions[i]=mouseTrackPositions[i+1]; }mouseTrackPositions[9]=pos; } }privatevoidSetLineRendererPosition(Vector3[]positions){lineRenderer.SetPositions(positions); }}

8、脚本编译正确,回到Unity界面,把“LineRenderer”赋给脚本,具体如下图

Unity LineRenderer 之 鼠标轨迹记录和拖尾实现

9、运行场景,在屏幕上点击鼠标,并滑动,即可看到,鼠标拖尾效果,具体如下图

Unity LineRenderer 之 鼠标轨迹记录和拖尾实现

10、到此《》讲解结束,谢谢

© 手抄报圈