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”赋给脚本,具体如下图
运行场景,在屏幕上点击鼠标,并滑动,即可看到,鼠标拖尾效果,具体如下图
到此《》讲解结束,谢谢