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

Unity 实用教程之 简单地图导航循环长箭头实现

时间:2024-10-12 04:07:57

1、打开Unity,新建一个空工程,具体如下图

Unity 实用教程之 简单地图导航循环长箭头实现

2、在场景中,新建一个Shader,并打开编辑代码,具体如下图

Unity 实用教程之 简单地图导航循环长箭头实现
Unity 实用教程之 简单地图导航循环长箭头实现

3、Shader的具体代码如下:Shader"Custom/Tra艘绒庳焰nsparentOverlay"{ Properties { _MainTex("MainTex(RGBA)",2D)="white"{} } SubShader { LOD100 CullOffLightingOffZWriteOffZTestAlways BlendSrcAlphaOneMinusSrcAlpha Tags { "Queue"="Overlay" "IgnoreProjector"="True" "RenderType"="Transparent" } Pass { SetTexture[_MainTex] } }}

4、在工程中,导入一张箭头图片,并新建一个Material,把Material的Shader改成刚才新建的Shader,贴图设置为导入的箭头图片,具体如下图

Unity 实用教程之 简单地图导航循环长箭头实现

5、在场景中新建一个“Plane”,设置如下图,并且把刚才新建的Material,赋给“Plane”,具体如下图

Unity 实用教程之 简单地图导航循环长箭头实现

6、在场景中新建一个脚本,并打开进行编辑,具体如下图

Unity 实用教程之 简单地图导航循环长箭头实现
Unity 实用教程之 简单地图导航循环长箭头实现
Unity 实用教程之 简单地图导航循环长箭头实现

7、脚本具体代码如下:usingSystem.Collections;usingSystem.Collections.Generic;usin爿讥旌护gUnityEngine;publicclassMapLine:MonoBehaviour{privateVector3startPos=Vector3.one; privateVector3endPos=Vector3.one; privateVector3rotation=Vector3.zero; privateMaterialmaterial; privateboolisMove; privateVector2moveDir; privateVector2resetOffset; voidAwake() { isMove=false; moveDir=newVector2(0,0.01f); resetOffset=newVector2(0,100); material=GetComponent<Renderer>().material; }///<summary> ///设置材质的Offset的属性,让箭头移动起来 ///</summary> privatevoidUpdate() { if(isMove) { if(material.mainTextureOffset==resetOffset) material.mainTextureOffset=moveDir; material.mainTextureOffset+=-moveDir; } if(Input.GetKeyDown(KeyCode.A)){SetLine(newVector3(0,0,0),newVector3(5,0,5)); } }publicvoidSetLine(Vector3startPos,Vector3endPos) { this.startPos=startPos; this.endPos=endPos; transform.localScale=Vector3.one*0.05f; transform.position=startPos; transform.eulerAngles=Vector3.zero; varscale=transform.localScale; varlineLong=CalLineLong()*2; scale.z=scale.z*lineLong; transform.localScale=scale; rotation.y=CalLineAngle(); transform.eulerAngles=rotation; material.mainTextureScale=newVector2(1,lineLong); transform.Translate(0,0,lineLong/4,Space.Self);//因为贴图箭头的方向不对,这里角度纠正,刚刚好Y+180 transform.eulerAngles+=newVector3(0,180,0); isMove=true; }///<summary> ///计算行军路线长度 ///</summary> privatefloatCalLineLong() { returnMathf.Sqrt(Mathf.Pow(startPos.x-endPos.x,2)+Mathf.Pow(startPos.z-endPos.z,2)); }///<summary> ///计算行军路线角度 ///</summary> privatefloatCalLineAngle() { //斜边长度 floatlength=Mathf.Sqrt(Mathf.Pow((startPos.x-endPos.x),2)+Mathf.Pow((startPos.z-endPos.z),2)); //对边比斜边sin floathudu=Mathf.Asin(Mathf.Abs(startPos.z-endPos.z)/length); floatag=hudu*180/Mathf.PI; //第一象限 if((endPos.x-startPos.x)>=0&&(endPos.z-startPos.z>=0)) ag=-ag+90; //第二象限 elseif((endPos.x-startPos.x)<=0&&(endPos.z-startPos.z>=0)) ag=ag-90; //第三象限 elseif((endPos.x-startPos.x)<=0&&(endPos.z-startPos.z)<=0) ag=-ag+270; //第四象限 elseif((endPos.x-startPos.x)>=0&&(endPos.z-startPos.z)<=0) ag=ag+90; returnag; }}

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

Unity 实用教程之 简单地图导航循环长箭头实现

9、运行场景,结果如下图

Unity 实用教程之 简单地图导航循环长箭头实现

10、到此,《Unity 实用教程之 简单地图导航循环长箭头实现》讲解结束,谢谢

© 手抄报圈