list<RectTransform>
list<RectTransform>
建议1.5倍观看。
quternion.euler(f,f,f);旋转
向上走不能立马向下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SnakeHead : MonoBehaviour {
public float velocity = 0.35f;
public int step;
private int x;
private int y;
private Vector3 headPos;
void Start()
{
InvokeRepeating("Move", 0, velocity);
x = step;y = 0;
}
void Update()
{
if (Input.GetKey(KeyCode.W))
{
x = 0;y = step;
}
if (Input.GetKey(KeyCode.S))
{
x = 0; y = -step;
}
if (Input.GetKey(KeyCode.A))
{
x = -step;y = 0;
}
if (Input.GetKey(KeyCode.D))
{
x = step;y = 0;
}
}
void Move()
{
headPos = gameObject.transform.localPosition;
gameObject.transform.localPosition = new Vector3(headPos.x + x, headPos.y + y, headPos. z.);
}
}
}
贪吃蛇头移动
InvokeRepeating()每隔多久调用一次
双色蛇身也可以用第一种方式,只要在每次移动后遍历所有的身体部位,刷新图片样式即可
if (bodyList.Count > 0)
{
bodyList[bodyList.Count - 1].localPosition = headPos;
bodyList.Insert(0, bodyList[bodyList.Count - 1]);
bodyList.RemoveAt(bodyList.Count - 1);
for (int i = 0; i < bodyList.Count; i++)
{
bodyList[i].GetComponent<Image>().sprite = bodySprites[i % 2 == 0 ? 0 : 1];
}
}
蛇头移动 蛇身跟着移动
蛇头对蛇身下命令
蛇头对事物进行销毁
蛇身监控蛇头碰撞
transform蛇头移动(每隔一段时间移动)
invoke report(移动)
蛇身移动:
2种方法
1:继承前面位置
2:挪动蛇屁股至蛇颈(颜色不同很难实现)
吃食:
后加蛇身
死亡:
碰到任意边界器
触碰蛇身
传送:
对蛇头进行传送
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方法再次调用,头部位置赋予尾部??*/
}
// C# => public void SetParent(Transform parent, bool worldPositionStays);
//设置实例物体的父物体.
//这个方法是把一个对象找个父级,
//如果worldPositionStays为true,那么该对象会保持世界坐标不变,相对于父级位置、缩放和旋转修改该对象,使得该对象保持与之前世界坐标空间一样的位置,旋转和缩放。
//如果为false那么该对象会保持局部坐标不变。
food.transform.SetParent(foodHolder, false);
position是根据世界原点为中心
localPosition是根据父节点为中心,如果没有父节点,localpositon就等同position
这里的sh的父级为Canvas
移动:
适合多色蛇身
蛇在移动的过程中,第一种实现方法是,从后往前移动,
适合单色蛇身
第二种方法,蛇最后的一个节点移动到蛇头移动后的地方其余身体不动。
eat food :
1.outline会描边,shadow会增加阴影;
1.没有出现Apply的设置都会自动保存;
isTrigger属性要打上勾,不会和别人碰撞,但是会记住谁撞的我,只勾上一个蛇头,别的不用勾了。
蛇头控制所有蛇身的移动
用重复调用调用蛇身移动
蛇身移动到上一个位置,每一个的下一步都是上一个物体的位置 (单双色都可以使用,视觉上无差别)
把最后的一个物体移到最前面的后一个位置,视觉上造成移动的错觉(只有单色可以使用)
toggle:选择器
toggle group:互斥选择器组
buttun:按钮
outline:轮廓
shadow:阴影
覆盖掉错误设置
1.改变公司名和文件名
2.允许分辨率选择框
分辨率不对的解决方法
1:注册表中HK_CURRENT_USER-SOFTWARE-UNITY-UNITYEDITOR下所有文件删掉
2.HK_CURRENT_USER-SOFTWARE-你的公司名
这个文件删掉
3.删掉发布的游戏文件
4.重新发布,发布时设置中允许分辨率选择框出现
5.删掉发布的游戏文件
6.重新发布,发布时设置中禁止分辨率选择框出现
7.发布后游戏正常
Resources文件夹可以用来动态加载文件
单例模式
例如:
private static MainUIController _instance;
public static MainUIController Instance{
get
{
return _instance;
}
}
//为了从SnakeHead脚本获得通知,就要定义一个static变量,就可以从类名访问,而不用获取到对象
//之后定义一个public方法就可以访问进来,从而可以把这个私有的_instance赋值给它