蛇身的生成
跟蛇头一样做预制体
上面要引入UI
用List来存蛇身
变量 拿预制体
还有一个图片数组 两段不同颜色
生成方法 实例化预制体 位置先不管
数组奇数偶数图片不一样 来一个判断index
?就是等于0 : 否则等于1
相同操作 找渲染器/ setParent 拿canvas
再把多的身子(transform)加入List
再在Move后调用
蛇身的生成
跟蛇头一样做预制体
上面要引入UI
用List来存蛇身
变量 拿预制体
还有一个图片数组 两段不同颜色
生成方法 实例化预制体 位置先不管
数组奇数偶数图片不一样 来一个判断index
?就是等于0 : 否则等于1
相同操作 找渲染器/ setParent 拿canvas
再把多的身子(transform)加入List
再在Move后调用
身体数量%2等于0,取奇数,否则取偶数
蛇身的生成
1、蛇身预制体,添加box collider,设置尺寸
2、list集合存储蛇身的transform组件
3、生成蛇身的函数:
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作为预制体,删掉蛇身
list<RectTransform>
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泛型集合存储蛇身
创建蛇的预制体
创建精灵体来存储蛇身图片
三元表达式:奇偶性来取图片