1、在上一篇的基础上,创建一个小方块,来表现移动范围,我们给他加上box collider。给我们的猪脚加上box collider。将我们的背景层向后移动一些,因为素材z轴相同的话射线检测会出错。这样前期就准备好了。
2、我们打开脚本就行编辑。完整的脚本我先贴下来:
3、首先我们的思路是鼠标点击猪脚创建范围,没有点击到猪脚的话,就什么都不做,当范围显示的时候,我们的点击范围内的位置,猪脚移动,否则就不移动。知道了这些,我们就需要如下:一个范围标志:public GameObject floor;判断是否选可移动的变量: int Select=0;将我们的范围标志保存到列表中: List<GameObject> floor1=new List<GameObject>();注意:list需要在开头添加using System.Collections.Generic;才能使用。
4、ok,我们先创建范围,想达到的效果如下:
5、我们如下写脚本:int k = 1;int z = 0;for (int i=0; i<7; i++) {for(int j=0稆糨孝汶;j<k;j++){GameObject floor0=(GameObject)Instantiate(floor,new Vector3((i-3)*3.2f+player.transform.position.x,(j-z)*3.2f+player.transform.position.y,0),Quaternion.identity);floor1.Add(floor0);}if(i<3){z++;k=k+2;}else{z--;k=k-2;}}如图,我们创建了六行的格子,第一行在猪脚位置向上推移三格(i-3)每个格子3.2大小为3.2f,创建了k个(k=1)也就是1个,让他向左偏移z(z=0)个格子。如果我们不偏移就会向下图一样:
6、然后我们的k加了2,也就是第二行创建了3个,z=1也就是向左偏移一个格子。然后到了第三行的时候(i>3)的时候,我们的开始反过来,让每行创建k-2个格子,向右偏移z-1个单位。完成就像这样:注意:floor1.Add(floor0);将每个格子放到list中去,我们下面会用到。
7、然后我们的逻辑如下:
8、所以脚本如下:if (Input.GetMouseButtonDown(0)) { Ray ray = camera.ScreenPointToRay (Input.m泠贾高框ousePosition); RaycastHit hit; Physics.Raycast (ray, out hit); if(Select==1){ if(hit.transform.tag=="floor"){ Pos[0]= new Vector3(hit.transform.position.x,player.transform.position.y,0); Pos[1]= new Vector3(hit.transform.position.x,hit.transform.position.y,0); point=0; move (); print (Pos[1]); } for(int i=0;i<floor1.Count;i++){ Destroy(floor1[i].gameObject); } Select=0; } else { if(hit.transform.tag=="player"){ Crefloor(); Select=1; } } print (hit.transform.tag); }怎么删除全部的格子呢,前面我们的list就用到了for(int i=0;i<floor1.Count;i++){Destroy(floor1[i].gameObject);}我们遍历list,将里面的元素都删除就行了。
9、OK,完工,看看效果吧!