Unity 贪吃蛇2D简易制作(二)

举报
陈言必行 发表于 2021/08/14 01:31:33 2021/08/14
【摘要】 文末源码: 然后开始写代码: 此代码用于动态生成食物,,挂载场景物体上即可(灯光,背景,摄像机) using UnityEngine; public class FoodDemo : MonoBehaviour { public GameObject SSFood; //把食物的预制体赋值 public int xLimit = 30; //游...
文末源码:
然后开始写代码:
此代码用于动态生成食物,,挂载场景物体上即可(灯光,背景,摄像机)

       using UnityEngine;
       public class FoodDemo : MonoBehaviour {
       public GameObject SSFood; //把食物的预制体赋值
       public int xLimit = 30; //游戏边界(最大高度,宽度)
       public int yLimit = 22;
      	// Use this for initialization
      	void Start () {
       //动态生成食物的时间
        InvokeRepeating("Food", 1, 5);
       	}
       void Food()
        {
       //随机生成食物位置
       int x = Random.Range(-xLimit, xLimit);
       int y = Random.Range(-yLimit, yLimit);
        Instantiate(SSFood, new Vector2(x, y), Quaternion.identity);
        }
       }
   
  
挂载到蛇身上:,,运行游戏就可以玩耍了,,,
 

      using System.Collections.Generic;
      using System.Linq;
      using UnityEngine;
      using UnityEngine.SceneManagement;
      //蛇的移动脚本
      public class Move : MonoBehaviour {
       List<Transform> Bodylist = new List<Transform>();
      public GameObject Body;  //吃到东西添加在后面的物体
      public bool ISwith = false;  //是否吃到
      public float velocitytime = 0.5f; //初始速度
       Vector2 direction = Vector2.up; //初始方向,
      // Use this for initialization
     	void Start () {
      //第一次调用方法是程序开始0.5秒过后,之后每隔velocitytime秒之后调用一次
       InvokeRepeating("MoveSnake",0.5f, velocitytime);
      	}
     	// Update is called once per frame
     	void Update () {
      if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
       {
       direction = Vector2.up;
       }
      if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
       {
       direction = Vector2.left;
       }
      if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
       {
       direction = Vector2.down;
       }
      if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
       {
       direction = Vector2.right;
       }
       }
      #region 移动&&核心算法
      void MoveSnake()
       {
      //每执行一次获取一次头部的位置
       Vector3 vpos = transform.position;
      //执行移动
       transform.Translate(direction);
      if (ISwith) //吃到食物
       {
      //实例化吃到的食物
       GameObject Bodyper =(GameObject)Instantiate(Body, vpos, Quaternion.identity);
      //添加到list的头部
       Bodylist.Insert(0, Bodyper.transform);
       ISwith = false;
       }
      //==============核心算法================
      if (Bodylist.Count>0)
       {
      //最后一个移动到第一个的位置
       Bodylist.Last().position = vpos;
      //list里面的元素 进行交换位置,,最后一个物体添加到list的最前面
       Bodylist.Insert(0, Bodylist.Last());
      //移除最后一个,,(因为他已经被加入到第一个的位置了)
       Bodylist.RemoveAt(Bodylist.Count - 1);
       }
      //======================================
       }
      #endregion
      /// <summary>
      /// 触发检测
      /// </summary>
      /// <param name="other">碰到带物体的名字</param>
      private void OnTriggerEnter(Collider other)
       {
      if (other.tag == "Food") //使用标签
       {
      //销毁食物预制体
       Destroy(other.gameObject);
       ISwith = true;
       }
      else  //碰到除了food的物体,重新开始游戏
       {
       SceneManager.LoadScene(0);
       }
       }
      }
  
 
 
 
扫描主页左侧二维码或 V信搜 " 开发同学留步",回复“ 贪吃蛇”获得项目源码。
 
 
 
 
 

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/77916738

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。