3D unity 贪吃蛇小游戏




游戏介绍:玩家通过键盘上下左右键或WASD键控制“蛇”的移动方向,通过“吃”更多随机出现的食物来增加身体的长度。
一、场景1
1、打开unity,创建一个新的2D项目(或在已创建的2D项目里创建一个新的场景),点击菜单栏里的File选择save scene,命名为贪吃蛇(都可)。

2、制作平台
第一步:创建一个Quad,重命名为BG (BackGround),调整大小作为贪吃蛇移动的平面,挑选自己喜欢的图片导入,制作材质球并赋到BG。
由于新的2D项目里本来没有光源,所以需要自己添加光源。

第二步:
做平面的边缘(边缘致死):在场景的BG下创建四个空对象(Create Empty)->GameObject,分别命名为上下左右,调整它们的位置及Box Collider的大小。

3、制作"蛇"
第一步:
蛇头:在场景中创建一个cube,重命名为SnakeHead,赋上你喜欢的图片的材质球,在它的属性里添加一个Rigidbody刚体结构,勾选Box Collider里的Is Trigger,并把它的Size设置成0.5(防止蛇头边缘碰到食物就误认为吃到食物,同时防止蛇头靠近边缘和身体单并没有撞上去而误判)。
蛇身:在场景里创建一个cube,重命名为SnakeBody,赋上你喜欢的图片的材质球,在它的属性里添加一个Rigidbody刚体结构,勾选Box Collider里的Is Trigger,并把它的Size设置成0.5(防止蛇头边缘碰到身体边缘但并没有吃到身体而误判),把蛇身拖入profabs做为预制件,并删除场景中的SnakeBody。

第二步:编写蛇头移动脚本



源代码:
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SnakeMove : MonoBehaviour
{
List<Transform> body = new List<Transform>();
Vector2 direction = Vector2.up;
public GameObject snakeBody;
private bool flag;
float speed = 0.3f;
void Move()
{
Vector2 position = transform.position;
if (flag)
{
GameObject bodypfb = (GameObject)Instantiate(snakeBody, position, Quaternion.identity);
body.Insert(0, bodypfb.transform);
flag = false;
}
else if (body.Count > 0)
{
body.Last().position = position;
body.Insert(0, body.Last().transform);
body.RemoveAt(body.Count - 1);
}
this.transform.Translate(direction);
}
// Use this for initialization
void Start()
{
InvokeRepeating("Move", speed, speed);
}
// Update is called once per frame
void Update() /*用键盘上下左右和WASD键控制蛇头运动方向
{
if (Input.GetKeyDown(KeyCode.W) || (Input.GetKeyDown(KeyCode.UpArrow)))
{
direction = Vector2.up;
}
else if (Input.GetKeyDown(KeyCode.S) || (Input.GetKeyDown(KeyCode.DownArrow)))
{
direction = Vector2.down;
}
else if (Input.GetKeyDown(KeyCode.A) || (Input.GetKeyDown(KeyCode.LeftArrow)))
{
direction = Vector2.left;
}
else if (Input.GetKeyDown(KeyCode.D) || (Input.GetKeyDown(KeyCode.RightArrow)))
{
direction = Vector2.right;
}
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("food"))
{
Destroy(other.gameObject);
flag = true;
}
else
{
SceneManager.LoadScene(0); /*控制蛇头如果碰到食物以外的东西就返回场景LoadScene(0)
}
}
}
——————————————————————————————————————————————————
把脚本赋到SnakeHead上。
tip:

4、制作食物
第一步:在场景中创建一个cube,重命名为Food,赋上你喜欢的图片的材质球,在它的属性里添加一个Rigidbody刚体结构,勾选Box Collider里的Is Trigger,并把它的Size设置成0.5(防止蛇头边缘碰到食物就误认为吃到食物)。
第二步:编写食物出现脚本,新建脚本文件,重命名为Food Create

源代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FoodCreate : MonoBehaviour {
public GameObject s_food;
public int x_limit = 9;
public int y_limit = 9;
void Food()
{
int x = Random.Range(-x_limit, x_limit);
int y = Random.Range(-y_limit, y_limit);
Instantiate(s_food, new Vector2(x, y), Quaternion.identity);
}
// Use this for initialization
void Start()
{
InvokeRepeating("Food", 2, 2);
}
// Update is called once per frame
void Update()
{}
}
——————————————————————————————————————————————————
把脚本赋到主相机上, S_food选择预制件里的Food,X_limit和Y_limit(即随机食物出现的范围)设为相应游戏平面大小。

场景二:提示游戏加载开始场景
第一步:保存好上一场景,新建一个场景(LoadGame),添加一个文本Text组件,调整文字出现位置和文本框大小;输入要显示的文字,调整字体大小颜色加粗等。

第二步: 编写场景切换代码

源代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement; /*场景控制
public class SnakeUI : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if(Input.GetMouseButtonDown(0))
{
SceneManager.LoadScene(1);
}
}
}
——————————————————————————————————————————————————
把脚本赋到Text上
最后:实现场景切换
点击菜单栏的File,打开Buiding Setting,点击Add Open Scenes,勾选两个场景。


调试运行 ,谢谢观看 。
毛发旺盛的 秃头小宝贝
2020.3.27
来源:oschina
链接:https://my.oschina.net/u/4462207/blog/3212714