资源描述:
《unity框选游戏目标的实现方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、学IT技能上我学院网woxueyuan.comUnity框选游戏目标的实现方法相信大家在打魔兽争霸类游戏的时候,需要框选多个游戏目标,然后来进行指挥作战,这种方法是如何实现的你嗯,在Unity里实现,其实很简单,有两个前提:1.画的方框始终是在屏幕空间进行的,而屏幕空间其实就是摄像机的视锥空间的投射了,不需要另外计算视锥。2.unity摄像机内建的功能,可以方便的把屏幕坐标和世界坐标互换。这样最简单的画框选物体就简化成了:1.用GL在屏幕空间动态画框。2.把备选对象的transform.position用camera.WorldToScreenPoiont变换成屏幕坐标
2、。3.判断这些position的点是否落在画的方框之内,如果是就把对象切换到画边框的层,呈现选中效果。一.屏幕动态画框这个过程相对简单就是在鼠标按下的时候记下鼠标位置,然后在鼠标移动时在当前鼠标位置和按下的位置之间画一个方形就行了。usingUnityEngine;usingSystem.Collections;学Unity上我学院:www.woxueyuan.com学IT技能上我学院网woxueyuan.compublicclassDrawRectangle:MonoBehaviour{publicColorrectColor=Color.green;privateV
3、ector3start=Vector3.zero;//记下鼠标按下位置privateMaterialrectMat=null;//画线的材质不设定系统会用当前材质画线结果不可控privatebooldrawRectangle=false;//是否开始画线标志//UsethisforinitializationvoidStart(){rectMat=newMaterial("Shader"Lines/ColoredBlended"{"+"SubShader{Pass{"+"BlendSrcAlphaOneMinusSrcAlpha"+"ZWriteOffCullOff
4、Fog{ModeOff}"+"BindChannels{"+"Bind"vertex",vertexBind"color",color}"+"}}}");//生成画线的材质学Unity上我学院:www.woxueyuan.com学IT技能上我学院网woxueyuan.comrectMat.hideFlags=HideFlags.HideAndDontSave;rectMat.shader.hideFlags=HideFlags.HideAndDontSave;}voidUpdate(){if(Input.GetMouseButtonDown(0)){drawRe
5、ctangle=true;//如果鼠标左键按下设置开始画线标志start=Input.mousePosition;//记录按下位置}elseif(Input.GetMouseButtonUp(0)){drawRectangle=false;//如果鼠标左键放开结束画线}}voidOnPostRender(){//画线这种操作推荐在OnPostRender()里进行而不是直接放在Update,所以需要标志来开启if(drawRectangle){学Unity上我学院:www.woxueyuan.com学IT技能上我学院网woxueyuan.comVector3end=In
6、put.mousePosition;//鼠标当前位置GL.PushMatrix();//保存摄像机变换矩阵if(!rectMat)return;rectMat.SetPass(0);GL.LoadPixelMatrix();//设置用屏幕坐标绘图GL.Begin(GL.QUADS);GL.Color(newColor(rectColor.r,rectColor.g,rectColor.b,0.1f));//设置颜色和透明度,方框内部透明GL.Vertex3(start.x,start.y,0);GL.Vertex3(end.x,start.y,0);GL.Vertex3
7、(end.x,end.y,0);GL.Vertex3(start.x,end.y,0);GL.End();学Unity上我学院:www.woxueyuan.com学IT技能上我学院网woxueyuan.comGL.Begin(GL.LINES);GL.Color(rectColor);//设置方框的边框颜色边框不透明GL.Vertex3(start.x,start.y,0);GL.Vertex3(end.x,start.y,0);GL.Vertex3(end.x,start.y,0);GL.Vertex3(end.x,end.y,0);G