制作水果忍者-JS-3

来源:互联网 发布:音乐视频剪辑软件 编辑:程序博客网 时间:2024/04/30 12:28

由于制作射线有点复杂,加上快过年了一直忙时间不够,所以拖到了现在才弄出来。

思想,用linerenderer渲染器来制作让玩着看到的线段,首先检测鼠标状态,利用鼠标按下时的状态,用mouseposition方法来检测鼠标当前位置,这个时候的位置是屏幕上的位置不是世界坐标位置,先记录先,然后在记录下一帧鼠标的位置,利用两帧之间的鼠标位置来划线,先是转换为世界坐标,然后将两帧之间的鼠标的移动距离来划分为10份,每划分一份就发射一条射线,在世界坐标中,用事先建立的容量为10的数组,记录10个点,前10个点都记录在数组中,第11个点利用队列的性质,先进先出记录。画出先后,利用划线的阿法值,来让划线消失。

然后就是实例化Instantiate来赋值创建的水果汁效果(利用粒子系统),

#pragma strictvar fire:boolean=false;//检测鼠标是否按下var fire_pre:boolean=false;//上次的鼠标状态var fire_down:boolean=false;//鼠标正在按下var fire_up:boolean=false;//鼠标没有按下var screenposition:Vector2;//鼠标在屏幕的坐标var start:Vector2;//开始时鼠标的位置var end:Vector2;//结束时鼠标的位置var trail:LineRenderer;//划线渲染器var index:int;//用于检测水果类型var point1:int//var linepart:int=0;//给渲染器赋值的数组序列var trailposition:Vector3[] = new Vector3[10];//给渲染器赋值的数组var trail_alpha:float;//让渲染器慢慢消失的阿法值var started:boolean;//检测是否开始参数var lineTimer:float;//用时间长久来画线var g:GameObject[];//水果汁赋值参数var p:GameObject[];//水果泡赋值参数function Start () {}function Update () {screenposition.x = Input.mousePosition.x;//记录鼠标的位置screenposition.y = Input.mousePosition.y;fire_down = false;//鼠标按下时为真,反着为假fire_up = false;//和上面的意思差不多fire=Input.GetMouseButton(0);//鼠标按下时一直返回TRUE值if(fire && !fire_pre) fire_down = true;//鼠标刚刚按下if(!fire && fire_pre) fire_up = true;//鼠标刚刚按完fire_pre=fire;//记录鼠标上一帧状态controll();}function controll(){if(fire_down){start = screenposition;//记录鼠标位置end = screenposition;linepart=0;AddTrailPosition();//画第一个位置started=true;//游戏开始lineTimer = 0.25;//多少秒后鼠标开始划线}if(fire && started ){start = screenposition;//鼠标当前位置var a:Vector3 = Camera.main.ScreenToWorldPoint(Vector3(start.x,start.y,4));//将鼠标当前位置转换为世界坐标位置var b:Vector3 = Camera.main.ScreenToWorldPoint(Vector3(end.x,end.y,4));//将鼠标上一帧位置转换为世界坐标位置if (Vector3.Distance(a,b)>0.1) {//鼠标移动的两点之间距离大于0.1是划线AddTrailPosition();linepart++;}end = start;//辅助鼠标当前位置,用于下一阵用trail_alpha=0.75;//辅助阿法}if(trail_alpha>0.5){for(var j:int=0;j<9;j++){for(var jj:int=0;jj<10;jj++){var s=Camera.main.WorldToScreenPoint(trailposition[j]);//鼠标前一点位置var e=Camera.main.WorldToScreenPoint(trailposition[j+1]);//鼠标厚后一点位置var ray:Ray=Camera.main.ScreenPointToRay(Vector3.Lerp(s,e,jj*1/10));//将两点之间的距离划分为10等分,var hit:RaycastHit;if(Physics.Raycast(ray, hit,100,1<<8))//划一份就发射出一条射线,{BlowObject(hit);}}}}if(trail_alpha ==0) linepart=0;if(fire_up && started) started=false;setposition();var c1:Color = new Color(1,1,1,trail_alpha);var c2:Color = new Color(0,1,0,trail_alpha);trail.SetColors(c1,c2);if(trail_alpha>0) trail_alpha -= Time.deltaTime;lineTimer -= Time.deltaTime;if (lineTimer<=0.0) {AddTrailPosition();linepart++;lineTimer = 0.01;}}function BlowObject(hit:RaycastHit){if(hit.collider.gameObject.tag != "destory"){hit.collider.gameObject.GetComponent(OnKill).kill(hit.collider.gameObject.tag);//摧毁切到的物体Destroy(hit.collider.gameObject);//切完水果准备if(hit.collider.gameObject.tag == "red") index=0;if(hit.collider.gameObject.tag == "green") index=1;if(hit.collider.gameObject.tag == "yellow") index=2;//制造水果汁效果if(hit.collider.gameObject.tag !="boom"){var position:Vector3=hit.point;position.z=2;GameObject.Instantiate(g[index],position,Quaternion.identity);position.z=1.5;GameObject.Instantiate(p[index],position,Quaternion.identity);}//切到炸弹if(hit.collider.gameObject.tag != "boom"){ point1++; }else{point1-=5;//var ins1=GameObject.Instantiate(cube,Vector3(0,0,6.13),Quaternion.identity);//yield WaitForSeconds(0.1);}}hit.collider.gameObject.tag = "destory";}function setposition(){var index1:int = 0;for(var v:Vector3 in trailposition){trail.SetPosition(index1,v);index1++;}}function AddTrailPosition(){if(linepart<9){for(var i:int=linepart;i<=9;i++){trailposition[i] = Camera.main.ScreenToWorldPoint(Vector3(start.x,start.y,4));}}else{for(var ii:int=0;ii<=8;ii++){trailposition[ii]=trailposition[ii+1];}trailposition[9]=Camera.main.ScreenToWorldPoint(Vector3(start.x,start.y,4));}}

0 0
原创粉丝点击