unity 战棋移动范围基础创建
来源:网络收集 点击: 时间:2024-08-24在上一篇的基础上,创建一个小方块,来表现移动范围,我们给他加上box collider。
给我们的猪脚加上box collider。
将我们的背景层向后移动一些,因为素材z轴相同的话射线检测会出错。
这样前期就准备好了。


我们打开脚本就行编辑。完整的脚本我先贴下来:



首先我们的思路是鼠标点击猪脚创建范围,没有点击到猪脚的话,就什么都不做,当范围显示的时候,我们的点击范围内的位置,猪脚移动,否则就不移动。
知道了这些,我们就需要如下:
一个范围标志:
public GameObject floor;
判断是否选可移动的变量:
int Select=0;
将我们的范围标志保存到列表中:
ListGameObject floor1=new ListGameObject();
注意:list需要在开头添加
using System.Collections.Generic;
才能使用。
4/9ok,我们先创建范围,想达到的效果如下:

我们如下写脚本:
int k = 1;
int z = 0;
for (int i=0; i7; i++) {
for(int j=0;jk;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(i3){
z++;
k=k+2;
}else{
z--;
k=k-2;
}
}
如图,我们创建了六行的格子,第一行在猪脚位置向上推移三格(i-3)每个格子3.2大小为3.2f,创建了k个(k=1)也就是1个,让他向左偏移z(z=0)个格子。如果我们不偏移就会向下图一样:

然后我们的k加了2,也就是第二行创建了3个,z=1也就是向左偏移一个格子。
然后到了第三行的时候(i3)的时候,我们的开始反过来,让每行创建k-2个格子,向右偏移z-1个单位。
完成就像这样:
注意:floor1.Add(floor0);将每个格子放到list中去,我们下面会用到。

然后我们的逻辑如下:

所以脚本如下:
if (Input.GetMouseButtonDown(0)) {
Ray ray = camera.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
Physics.Raycast (ray, out hit);
if(Select==1){
if(hit.transform.tag==floor){
Pos= new Vector3(hit.transform.position.x,player.transform.position.y,0);
Pos= new Vector3(hit.transform.position.x,hit.transform.position.y,0);
point=0;
move ();
print (Pos);
}
for(int i=0;ifloor1.Count;i++){
Destroy(floor1.gameObject);
}
Select=0;
}
else
{
if(hit.transform.tag==player){
Crefloor();
Select=1;
}
}
print (hit.transform.tag);
}
怎么删除全部的格子呢,前面我们的list就用到了
for(int i=0;ifloor1.Count;i++){
Destroy(floor1.gameObject);
}
我们遍历list,将里面的元素都删除就行了。
9/9OK,完工,看看效果吧!

版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_1154909.html