20240人加入学习
(121人评价)
Unity初级案例 - 贪吃蛇(Unity2017.2.0)

制作于2017.12.16

价格 免费

蛇身的生成

跟蛇头一样做预制体

上面要引入UI

用List来存蛇身

变量 拿预制体

还有一个图片数组 两段不同颜色

生成方法 实例化预制体 位置先不管

数组奇数偶数图片不一样  来一个判断index

?就是等于0 : 否则等于1

相同操作 找渲染器/ setParent 拿canvas

再把多的身子(transform)加入List

再在Move后调用

[展开全文]

身体数量%2等于0,取奇数,否则取偶数

[展开全文]

1、蛇身预制体,添加box collider,设置尺寸

2、list集合存储蛇身的transform组件

3、生成蛇身的函数:

  • 三元表达式,,确定新生成蛇身的
  • 设置蛇身图片
  • 设置蛇身的父物体
  • 更新list集合
[展开全文]

list .根据奇偶来放进去图片。

UGUI下都要以image作为基础图片显示。

直接拖进去不大行。

用一个集合来存。蛇身。

head 上面写。

根据奇偶性来生成。那么,

[展开全文]

1.制作 蛇身 预制体,设置图片,改变大小,添加碰撞器,设置碰撞器,改名“SnakeBody”

 

2.使用一个集合 存放 蛇身位置

引入命名空间 using System.Collections.Generic;

定义 蛇身位置 集合

public List<ReckTransform> bodyList = new List<Transform>();

定义 蛇身预制体

public GameObject bodyPrefab;

定义 两种蛇身 图片

public Sprite[] bodySprite = new Sprite[2];

 

定义 画板 Canvas,以便作为父物体

private Transform canvas

并初始化canvas

void start()

{canvas = GameObject.Find(”Canvas“) .transform}

 

3.生长蛇身 函数

void Grow()

{

//图片索引选择

int index = (bodyList.count%2==0)?0:1;

//实例化蛇身

GameObject body = Instantiate(bodyPrefab);

//设置图片

body.GetComponent<Image>.sprite = bodySprites[index]

//设置父物体

body.transform.SetParent(canvas,false);

//将身体放入蛇身的数组

bodyList.Add(body.transform);

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

在 与 食物碰撞处写生成蛇身的代码

[展开全文]

在Canvas上建一个Image,重命名SnakeBody,把sb0201导入,Width:40 Height:40,Pos X:0 Pos Y:0,将SnakeBody作为预制体,删掉蛇身

[展开全文]

 void Move() //move移动方法
    {
        headPos = gameObject.transform.localPosition;
        gameObject.transform.localPosition = new Vector2(headPos.x+x,headPos.y+y);

        if (bodyList.Count>0)//判断这个集合内的元素不为零
        {
            //将返回这个集合里的最后一个元素位置变为原先头部的位置
   bodyList.Last().localPosition = headPos;
            //再将原先这个集合的最后一个元素插入集合的第一位
        bodyList.Insert(0,bodyList.Last());
            //再将最后一位移除
        bodyList.RemoveAt(bodyList.Count-1);
            /*实际上蛇身的transform因为原先头部位置的赋值,实现了头部跟随移动
             当蛇吃下食物时,新的蛇身实例化出来但未在蛇头后面,在蛇头下一步移动时,头部位置传递给了蛇身
              首先新的蛇身实例化位置在Canvas父级之下,之后再进行位置传递?
              是否和InvokeRepeatin重复调用Move有关?
              当蛇头下次移动时即Move方法再次调用,头部位置赋予尾部??*/
        }
 

[展开全文]

给蛇身添加Box collider 2D

List泛型集合存储蛇身

创建蛇的预制体

创建精灵体来存储蛇身图片

三元表达式:奇偶性来取图片

[展开全文]

授课教师

SiKi学院讲师

课程特色

图文(1)
视频(23)
下载资料(1)