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

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

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

  
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using UnityEngine;
  4. using UnityEngine.SceneManagement;
  5. //蛇的移动脚本
  6. public class Move : MonoBehaviour {
  7. List<Transform> Bodylist = new List<Transform>();
  8. public GameObject Body; //吃到东西添加在后面的物体
  9. public bool ISwith = false; //是否吃到
  10. public float velocitytime = 0.5f; //初始速度
  11. Vector2 direction = Vector2.up; //初始方向,
  12. // Use this for initialization
  13. void Start () {
  14. //第一次调用方法是程序开始0.5秒过后,之后每隔velocitytime秒之后调用一次
  15. InvokeRepeating("MoveSnake",0.5f, velocitytime);
  16. }
  17. // Update is called once per frame
  18. void Update () {
  19. if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
  20. {
  21. direction = Vector2.up;
  22. }
  23. if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
  24. {
  25. direction = Vector2.left;
  26. }
  27. if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
  28. {
  29. direction = Vector2.down;
  30. }
  31. if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
  32. {
  33. direction = Vector2.right;
  34. }
  35. }
  36. #region 移动&&核心算法
  37. void MoveSnake()
  38. {
  39. //每执行一次获取一次头部的位置
  40. Vector3 vpos = transform.position;
  41. //执行移动
  42. transform.Translate(direction);
  43. if (ISwith) //吃到食物
  44. {
  45. //实例化吃到的食物
  46. GameObject Bodyper =(GameObject)Instantiate(Body, vpos, Quaternion.identity);
  47. //添加到list的头部
  48. Bodylist.Insert(0, Bodyper.transform);
  49. ISwith = false;
  50. }
  51. //==============核心算法================
  52. if (Bodylist.Count>0)
  53. {
  54. //最后一个移动到第一个的位置
  55. Bodylist.Last().position = vpos;
  56. //list里面的元素 进行交换位置,,最后一个物体添加到list的最前面
  57. Bodylist.Insert(0, Bodylist.Last());
  58. //移除最后一个,,(因为他已经被加入到第一个的位置了)
  59. Bodylist.RemoveAt(Bodylist.Count - 1);
  60. }
  61. //======================================
  62. }
  63. #endregion
  64. /// <summary>
  65. /// 触发检测
  66. /// </summary>
  67. /// <param name="other">碰到带物体的名字</param>
  68. private void OnTriggerEnter(Collider other)
  69. {
  70. if (other.tag == "Food") //使用标签
  71. {
  72. //销毁食物预制体
  73. Destroy(other.gameObject);
  74. ISwith = true;
  75. }
  76. else //碰到除了food的物体,重新开始游戏
  77. {
  78. SceneManager.LoadScene(0);
  79. }
  80. }
  81. }
 
 
扫描主页左侧二维码或 V信搜 " 开发同学留步",回复“ 贪吃蛇”获得项目源码。
 
 
 
 
 

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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