您的位置首页百科问答

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

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

的有关信息介绍如下:

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

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

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

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

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

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

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

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

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

“MouseTrack”脚本的具体内容如下;

usingUnityEngine;

publicclassMouseTrack:MonoBehaviour{

///

///获取LineRenderer组件

///

[Header("获得LineRenderer组件")]

publicLineRendererlineRenderer;

privateVector3[]mouseTrackPositions=newVector3;

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;

}

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=pos;

}

}

privatevoidSetLineRendererPosition(Vector3[]positions){

lineRenderer.SetPositions(positions);

}

}

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

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

到此《》讲解结束,谢谢