广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    unity 战棋移动范围基础创建

    来源:网络收集  点击:  时间:2024-08-24
    【导读】:
    此篇在下面的基础上学习,目的是实现下图效果。unity战棋方式移动http://jingyan.baidu.com/article/72ee561a58604ae16138df33.html工具/原料more一台电脑unity4.0unity战棋方式移动 http://jingyan.baidu.com/article/72ee561a58604ae16138df33.html方法/步骤1/9分步阅读

    在上一篇的基础上,创建一个小方块,来表现移动范围,我们给他加上box collider。

    给我们的猪脚加上box collider。

    将我们的背景层向后移动一些,因为素材z轴相同的话射线检测会出错。

    这样前期就准备好了。

    2/9

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

    3/9

    首先我们的思路是鼠标点击猪脚创建范围,没有点击到猪脚的话,就什么都不做,当范围显示的时候,我们的点击范围内的位置,猪脚移动,否则就不移动。

    知道了这些,我们就需要如下:

    一个范围标志:

    public GameObject floor;

    判断是否选可移动的变量:

    int Select=0;

    将我们的范围标志保存到列表中:

    ListGameObject floor1=new ListGameObject();

    注意:list需要在开头添加

    using System.Collections.Generic;

    才能使用。

    4/9

    ok,我们先创建范围,想达到的效果如下:

    5/9

    我们如下写脚本:

    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)个格子。如果我们不偏移就会向下图一样:

    6/9

    然后我们的k加了2,也就是第二行创建了3个,z=1也就是向左偏移一个格子。

    然后到了第三行的时候(i3)的时候,我们的开始反过来,让每行创建k-2个格子,向右偏移z-1个单位。

    完成就像这样:

    注意:floor1.Add(floor0);将每个格子放到list中去,我们下面会用到。

    7/9

    然后我们的逻辑如下:

    8/9

    所以脚本如下:

    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/9

    OK,完工,看看效果吧!

    编程语言
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_1154909.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-05 02:28:16  耗时:0.025
    0.0254s