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

制作于2017.12.16

价格 免费
  • Toggle Group组件,使得只能单选
  • 按照层级顺序渲染,因此背景首先渲染总要放在上面。
[展开全文]

[任务13:10-第一个食物的随机生成]

导入(老师是说加上)UnityEngine.UI

要在最开头

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

加上using UnityEngine.UI;

就是这样

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

下面附上本节课的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class FoodMaker : MonoBehaviour {
    public int xlimit = 20;
    public int ylimit = 11;
    public int xoffset = 8;
    public GameObject foodPrefab;
    public Sprite[] foodSprites;
    private Transform foodHolder;

    private void Start()
    {
        foodHolder=GameObject.Find("FoodHolder").transform;
        MakeFood();
    }

    void MakeFood()
    {
        int index = Random.Range(0, foodSprites.Length);
        GameObject food = Instantiate(foodPrefab);
        food.GetComponent<Image>().sprite = foodSprites[index];
        food.transform.SetParent(foodHolder, false);
        int x = Random.Range(-xlimit + xoffset, xlimit);
        int y = Random.Range(-ylimit , ylimit);
        food.transform.localPosition = new Vector3(x * 30, y * 30, 0);

    }

}
 

[展开全文]

isTrigger属性要打上勾,不会和别人碰撞,但是会记住谁撞的我,只勾上一个蛇头,别的不用勾了。

[展开全文]

step的值设的太小的话,设为1的时候,蛇移动的速度非常的慢,会令人以为蛇动不了,可以把值设的大些如20  。

[展开全文]

int  xlimit=21,;int ylimit=11;

int xoffset =7;

Transform FoodHolder;

GameObject food;

Sprite[]  footSprites;

int index = Random.Range(0,foodSprite.

length);

GameObject foood= Instantiate(food);

[展开全文]

using UnityEngine;

public class snakehesd : 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=0;y=step;
    }
    void Update()
    {

if(Input.GetKeyDown(KeyCode.Space))

{

CancelInvoke();

InvokeRepeating("Move",0,velocity-0.2f);

}

if(Input.GetKeyUp(KeyCode.Space))

{

CancelInvoke();

InvokeRepeating("Move",0,velocity);

}

        if (Input.GetKey(KeyCode.W)&&y!=-step)
        {

 gameObject.transform.localRotation=Quaternion.Euler(0,0,0);
            x=0;y=step;
        }
        if (Input.GetKey(KeyCode.S)&&y!=step)
        {

 gameObject.transform.localRotation=Quaternion.Euler(0,0,180);
            x=0;y=-step;
        }
        if (Input.GetKey(KeyCode.A)&&x!=step)
        {

 gameObject.transform.localRotation=Quaternion.Euler(0,0,90);
            x=-step;y=0;
        }
        if (Input.GetKey(KeyCode.D)&&x!=-step)
        {

 gameObject.transform.localPlocalRotationosition=Quaternion.Euler(0,0,-90);
            x=step;y=0;
        }
    }
    void Move()
    {
        HeadPos=gameObject.transform.localPosition;
        gameObject.transform.localPosition=new Vector3(HeadPos.x+x,HeadPos.y+y,HeadPos.z);
    }
}

[展开全文]

invokerepeating(gameobject, delaytime, longtime)

food.transform.SetParent(foodHolder, false);

private static FoodMake _instance;
    public static FoodMake Instance
    {
        get
        {
            return _instance;
        }
    }

 

 

 

[展开全文]

边界传送

加body的tag

再碰撞方法里加入该标签的判断 (这都是模板了)方法留空Debug.Log  多边界用switch

直接把蛇头坐标移到对面  弹下去还要走一步以避免碰撞

按30一格就是好算

注意case是冒号

[展开全文]

奖励生成

reward prefab

额外生成

给makefood 加一个形参 bool isReward

start里将其设为flase

在sh里的调用 做一个判断  用随机数1~100来做一个概率器

true的时候额外生成

奖励目标生成把食物的语法复制一下  把int删掉就不用改名了 把名字改全

再在碰撞器里加一下判断

[展开全文]

注意:锚点设置技巧,靠哪近放在哪

 

 

1.将Start场景复制

 

2.删掉不需要的东西

 

3.控制面板保存三个Text,“无尽模式”、“得分:0”、“长度:0”

 

4.添加两个图片,添加Button控件,Home键和暂停键

[展开全文]

image与canvas对齐方法:右边的边框按alt后选最后对齐

锚点和四个点的关系保持相对静止

[展开全文]

分数与长度的记录 nameSpace 空间

变量 分数/长度  两个公共text  注意Text 类型要大写  拖  拿到背景

方法一   做一个改UI的方法

单例   要加一个单例因为要在外面访问  直接把那个复制过来  我觉得可以建一个模板库

awake里 给单例赋值

再在sh脚本里吃掉方法里调用更新UI方法

方法2 等级成长 score/100    switch 换背景

改颜色  bgImage.color=new Color();

color tool用#号:  ColorUtility.TryParseHtmlString((#。。。,out 输出的参数)  要一个东西存一下private Color tempColor;

颜色编号顺序 蓝绿黄橙红

 

 

[展开全文]

//引用library

using System.Collections;

 

//调用方法

 StartCoroutine(gameOver(1.5f));

 

//写携程方法 IEnumerator

 IEnumerator gameOver(float t)
 {
        yield return new WaitForSeconds(t);
                                    UnityEngine.SceneManagement.SceneManager.LoadScene(1);
}

 

 

PlayerPrefs.SetInt("lastl" ,)

[展开全文]

1.在四个边界处分别创造四个碰撞器

     创建上边界:创建空物体,长度1280,宽度10,设置锚点在上边,添加BoxColider2D碰撞器组件,将碰撞器的长度设为1280,宽度10

 

     同理创建其他碰撞器,注意锚点

 

2.为边界添加控件Image,如果游戏是边界模式,会现实Image,颜色设为红色

[展开全文]

alt点 canvas rect transform可以拉伸

 

outline 描边组件

shadow阴影组件

[展开全文]
  • UGUI 移动需要用localPosition,因为Canvas相对于世界坐标具有偏移量
  • Input.GetKey(KeyCode.W)
  • InvokeRepeating("Move",0,velocity)
[展开全文]

授课教师

SiKi学院讲师

课程特色

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