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

制作于2017.12.16

价格 免费

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);

[展开全文]

transform.position和transform.localPosition区别

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赋值给它
    

[展开全文]