一、实现效果
功能
- 生成三节蛇身,且每一节蛇身能持续跟随上一节蛇身/蛇头
- 按w/s/a/d能控制蛇头的移动方向
二、知识点学习
1、数组格式
标准格式:
List<类型名> 变量名=new List<类型名>();
eg:设置一个对象数组
List< GameObject> snakeBody=new List< GmaeObject>();
2、Instantiate增加的三元函数
标准格式
public static Object Instantiate (Object original);
public static Object Instantiate (Object original, Transform parent);
public static Object Instantiate (Object original, Transform parent, bool instantiateInWorldSpace);
public static Object Instantiate (Object original, Vector3 position, Quaternion rotation);(这次项目用到的)
public static Object Instantiate (Object original, Vector3 position, Quaternion rotation, Transform parent);
参数 | 解释 |
---|---|
original | 要复制的现有对象 |
position | 新对象的位置。 |
rotation | 新对象的方向。 |
parent | 将指定给新对象的父对象。 |
instantiateInWorldSpace | 分配父对象时,传递 true 可直接在世界空间中定位新对象。传递 false 可相对于其新父项来设置对象的位置。 |
3、unity3d 的Quaternion.identity和transform.rotation区别
性质不同、旋转角度不同、值大小不同。
Quaternion.identity就是指Quaternion(0,0,0,0),就是每旋转前的初始角度,是一个确切的值,而transform.rotation是指本物体的角度,值是不确定的,比如可以这么设置transform.rotation = Quaternion.identity;
一、性质不同
1、Quaternion.identity:Quaternion.identity是值类型。
2、transform.rotation:transform.rotation属性变量。
二、旋转角度不同
1、Quaternion.identity:Quaternion.identity的旋转角度固定,声明后不可再赋值。
2、transform.rotation:transform.rotation的旋转角度不固定,声明后可以再赋值。
三、值大小不同
1、Quaternion.identity:Quaternion.identity的值大小必须大于0度,超过360度,按倍数去掉360度旋转。
2、transform.rotation:transform.rotation的值大小可以小于0度,按倍数加上360度旋转。
eg: GameObject newbodynext = Instantiate< GameObject> (body, //已经创建好的预制体
transform.position - (i + 1) * new Vector3(0, 0.5f, 0),//0.5f是因为蛇头中心点与蛇身中心点的距离为0.5f,意思为在y轴上每0.5个距离生成一个蛇身预制体
Quaternion.identity) ;//转向
4、数组内增加函数
void List< GameObject >.Add(GameObject item);(增加对象,自带,不用自己写)
void List< Vector3 >.Add(snakeBody[i].transform.position);(增加位置,自带,不用自己写)
三、代码实现
准备工作:
- 设置一张背景图,
- 将蛇身设置为预制体,
- 在蛇头下面挂SnakeHead.cs脚本,将蛇身预制体拖到蛇头脚本的body里。
using System.Collections;
using System.Collections.Generic;
using U