Unity3D开发之贪吃蛇

主要视图

Materials

Prefabs


Scenes

Scripts


Texture

关键代码

FoodSnake

public class FoodSnake : MonoBehaviour {

    //定义预置体,方便实例化
    public GameObject foodSanke;

   //公开食物生成位置
    public int xLimit = 30;
    public int yLimit = 22;

    void Start () {

        //调用方法的函数
        InvokeRepeating("CreateFood",1,3);
    
    }
    
    
    void Update () {
    
    }


    void CreateFood() { 
    
    //实例化食物 游戏对象的自身方法
       // GameObject.Instantiate(foodSanke,new Vector2(1,1),Quaternion.identity);

        //让位置随机 x=61 y=45;
        //GameObject.Instantiate(foodSanke,new Vector2(Random.Range(-30,30),Random.Range(-22,22)),Quaternion.identity);
        
        //方便修改食物生成范围,将位置公开

        GameObject.Instantiate(foodSanke,new Vector2(Random.Range(-xLimit,xLimit),Random.Range(-yLimit,yLimit)),Quaternion.identity);
    
    }
}

MoveSnake

using UnityEngine;
using System.Collections;
using System.Collections.Generic;//引用 泛型集合 命名空间 
using System.Linq;//引用,命名空间
using UnityEngine.SceneManagement;//转换场景需要的引用


public class MoveSnake : MonoBehaviour {

   



    //定义一个transform类型的变量
    private Transform m_Transform;

    //定义一个开始的方向 默认向上移动
    Vector2 direction = Vector2.up;


    //定义一个公开的速度 为之后游戏速度改变做准备
    public float velocitytime = 0.5f;


    //定义一个公开的body变量,用来存放cube body预置体
    public GameObject body;

    //定义一个开关,用来检测食物
    private bool Open = false;


    //将蛇身存入一个集合里去 定义集合 的变量
    List<Transform> snakeBody = new List<Transform>();

    void Start () {
    
        //赋值
        m_Transform=gameObject.GetComponent<Transform>();

        //重复调用方法的函数
        //InvokeRepeating("Move",0.5f,0.5f);//参数1:移动的方法 参数2:第一次调用的时间 参数3:以后每个0.5f秒调用一次;

        InvokeRepeating("Move", 0.5f, velocitytime);
    }
    
    
    void Update () {
    
        //控制方向
        if (Input.GetKey(KeyCode.A))
        {
            direction = Vector2.left;
        }
        if (Input.GetKey(KeyCode.D))
        {
            direction = Vector2.right;
        }
        if (Input.GetKey(KeyCode.W))
        {
            direction = Vector2.up;
        }
        if (Input.GetKey(KeyCode.S))
        {
            direction = Vector2.down;
        }





    }

    /// <summary>
    /// 移动的方法
    /// </summary>
    void Move() {


        //在移动过程中,判断开关是否打开,打开就创建蛇身;(实例化)位置为本次蛇头的位置
        Vector3 VPosition = m_Transform.position; //先执行这一句,保存起来位置,再执行下一句,让它移动
       
        //默认向上移动
        m_Transform.Translate(direction);  
 
        if (Open)
        {
            //实例化 蛇身
          // GameObject.Instantiate(body,VPosition,Quaternion.identity);
            //把实例化的蛇身存起来;
            GameObject bodyYuzhi = GameObject.Instantiate(body,VPosition,Quaternion.identity) as GameObject;
           
            //集合插入方法 吃掉食物后在定义的蛇身集合0 号位前面插入实例化后的蛇身
            
            snakeBody.Insert(0,bodyYuzhi.transform);

            //检查是否插入成功
           // Debug.Log(snakeBody.Count);

            //实力一次之后把开关 关掉
           // Open = false;
           Open = !Open;

        }else if (snakeBody.Count > 0)//判断集合里有元素(蛇身)的话 将蛇身跟随蛇头移动的方法
        {
            //蛇身的位置等于蛇头的位置
            snakeBody.Last().position = VPosition;
           // Debug.Log(snakeBody.Last().position);
            //把最后一个位置从零号位插入;
            snakeBody.Insert(0, snakeBody.Last());
            //把最后一个元素删除掉;
            snakeBody.RemoveAt(snakeBody.Count - 1);//参数:表示固定的下标移除元素;  
          
           

        }
    }




    //没有刚体 又想触发事件 有两个碰撞器前提下,将蛇改成触发器,添加刚体,不使用重力 
    //食物是碰撞体就行 ,并且将碰撞体的size改成0.5,否则侧面也会吃掉食物的;

    //蛇在移动过程中,检测下触发了谁,就让说消失 把食物的便签改成Food;

    /// <summary>
    /// 检测触发方法
    /// </summary>
    /// <param name="coll">触发的对象</param>
    void OnTriggerEnter(Collider coll) {

        if (coll.gameObject.tag == "Food")
        {
            //触发食物,将开关打开;
            // Open = true;
            Open = !Open;
            //销毁食物
            Destroy(coll.gameObject);
        }
        else { 
          //如果不是触发食物,触发其他物体,游戏结束;
            //切换场景
           // SceneManager.LoadScene(0);//场景管理,加载到另一场景 场景就是设置的第一个 在边框加上4个碰撞器 触发其他即游戏重新开始;
            //切换第二场景
            SceneManager.LoadScene(0);
        
        }
    }


}

StartUI

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;//场景管理命名空间

public class StartUI : MonoBehaviour {

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {

        if (Input.GetMouseButtonDown(0))
        {
            //点击回到第一个场景;
            SceneManager.LoadScene(1);
        }
    
    }
}

后记:没有计分,没有结束界面(因为在滚动球和飞盘射击都已经写过了,这里就不再一一重复了)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容