Unity百游修炼22(下)——C#和Unity实现贪吃蛇(含完整项目流程及源项目素材)

Unity—从入门到精通(第一天) Unity是一款跨平台的游戏引擎,支持多种操作系统,包括Windows、Mac、iOS和Android等。凭借其强大的功能和灵活性,Unity成为了当今业界最受欢迎的游戏开发工具之一。它的核心特性包括可视化编辑器、C#脚本编程环境、内置物理引擎,及一个资源商店,开发者可以在其中获取各种素材、插件和工具,大幅提升开发效率。 阅读详情

一·前言

        在本教程中,我们将一步一步带领大家制作一个经典的贪吃蛇游戏。无论你是刚入门的编程新手,还是有一定经验的开发者,都能通过这个项目提升自己的技能,深入了解游戏开发的基本流程和技巧。让我们一起开启这段有趣的游戏制作之旅吧!

二·完整项目和资源

注意:因个人原因,本次游戏后续内容将不再更新,完整内容见如下资源项目

通过网盘分享的文件:snake
链接: https://pan.baidu.com/s/14O5RhI1GgzpdZ6nS8F7WVw?pwd=1209 提取码: 1209 
--来自百度网盘超级会员v5的分享

三·详细操作步骤

1.移动方式的选择

(1)锁定蛇头的z轴旋转

2.使用物理系统进行移动的注意事项

需要在fixedupdate()中进行物理行为操作(保证固定时间操作)

3.使用代码获取刚体组件

(1)创建脚本SnakeMove

(2)编写代码

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

public class SnakeMove : MonoBehaviour
{
    private Rigidbody2D SnakeRig2D;
    // Start is called before the first frame update
    void Start()
    {
        SnakeRig2D = GetComponent<Rigidbody2D>();
    }
}

4.获取键盘的输入

(1)打开SnakeMove脚本

(2)编辑代码

public class SnakeMove : MonoBehaviour
{
    private Rigidbody2D SnakeRig2D;
    private Vector2 SnakeDirection;
    // Start is called before the first frame update
    void Start()
    {
        SnakeRig2D = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float y = Input.GetAxisRaw("Vertical");
        SnakeDirection = new Vector2(x, y);
    }
}

5.改变刚体的速度控制物体移动

(1)打开SnakeMove脚本

(2)编辑代码

public class SnakeMove : MonoBehaviour
{
······
    public float SnakeSpeed = 1;
······
    private void FixedUpdate()
    {
        movesnake();
    }
······
    private void movesnake()
    {
        SnakeRig2D.velocity = SnakeDirection*SnakeSpeed;
    }
······
}

6.改变输入方式为改变方向做铺垫

(1)实现按键只能控制一个方向移动

    void Update()
    {
        //float x = Input.GetAxisRaw("Horizontal");
        //float y = Input.GetAxisRaw("Vertical");
        if(Input.GetKey(KeyCode.W))
        {
            SnakeDirection = new Vector2(0,1);
        }
        if(Input.GetKey(KeyCode.S))
        {
            SnakeDirection = new Vector2(0, -1);
        }
        if(Input.GetKey(KeyCode.D))
        {
            SnakeDirection = new Vector2(1, 0);
        }
        if(Input.GetKey(KeyCode.A))
        {
            SnakeDirection = new Vector2(-1, 0);
        }
    }

(2)控制贪吃蛇的转向(保证蛇头图案也可以改变方向,同时不能直接执行180掉转移动)

 void Update()
 {
     //float x = Input.GetAxisRaw("Horizontal");
     //float y = Input.GetAxisRaw("Vertical");
     if(Input.GetKey(KeyCode.W)&&SnakeRig2D.velocity!=Vector2.down)
     {
         SnakeDirection = new Vector2(0,1);
         transform .rotation =Quaternion.Euler(0,0,0) ;
     }
     if(Input.GetKey(KeyCode.S)&&SnakeRig2D.velocity!=Vector2.up)
     {
         SnakeDirection = new Vector2(0, -1);
         transform.rotation = Quaternion.Euler(0, 0, -180);
     }
     if(Input.GetKey(KeyCode.D) && SnakeRig2D.velocity != Vector2.left)
     {
         SnakeDirection = new Vector2(1, 0);
         transform.rotation = Quaternion.Euler(0, 0, -90);
     }
     if(Input.GetKey(KeyCode.A) && SnakeRig2D.velocity != Vector2.right)
     {
         SnakeDirection = new Vector2(-1, 0);
         transform.rotation = Quaternion.Euler(0, 0, 90);
     }
 }

7.制作贪吃蛇的食物

(1)创建空物体命名为FoodMaker

(2)创建一个子image UI,命名为Food

(3)创建一个Prefabs预制体文件夹存放Food

(4)创建一个脚本Generate Food

(5)编辑代码

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

public class GenerateFood : MonoBehaviour
{
    public GameObject FoodPre;
    public Sprite[] Foodsprites;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

(6)挂载脚本以及脚本资源

8.生成食物并指定食物的父物体

public class GenerateFood : MonoBehaviour
{
    public GameObject FoodPre;
    public Sprite[] Foodsprites;
    private Transform FoodMakeTrans;
    // Start is called before the first frame update
    void Start()
    {
        FoodMakeTrans = transform;
    }

    // Update is called once per frame
    void Update()
    {
        GameObject food= GameObject.Instantiate(FoodPre);
        food.transform.parent = FoodMakeTrans;
    }
}


9.在随机位置生成食物

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

public class GenerateFood : MonoBehaviour
{
    public GameObject FoodPre;
    public Sprite[] Foodsprites;
    private Transform FoodMakeTrans;
    // Start is called before the first frame update
    void Start()
    {
        FoodMakeTrans = transform;
        makefood();
    }

    // Update is called once per frame
    void Update()
    {
       
    }
     
    private void makefood()
    {
        int xlocation = Random.Range(-310, 600);
        int ylocation = Random.Range(-330, 330);
        GameObject food = GameObject.Instantiate(FoodPre, new Vector2(xlocation, ylocation), Quaternion.identity);
        food.transform.SetParent(FoodMakeTrans, false);
        FoodPre.GetComponent<Image>().sprite = Foodsprites[Random.Range(0, Foodsprites.Length)];
    }
}

10.贪吃蛇与食物的碰撞处理——吃食物

(1)给Food预制体添加碰撞器,不需要勾选触发器图片存在错误


(2)给SnakeHead添加碰撞器并且勾选触发器

(3)给Food预制体添加Food标签

(4)打开SnakeMove代码

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag=="Food")
        {
            Destroy(collision.gameObject); 
        }
    }

11.实现食物被吃掉后再次生成

public class GenerateFood : MonoBehaviour
{
    private static GenerateFood _instance;
   ······

    public static GenerateFood Instance {  get { return _instance; } }
    ···
    {
        _instance = this;
    }
 ······
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SnakeMove : MonoBehaviour
{
······
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag=="Food")
        {
            Destroy(collision.gameObject);
            GenerateFood.Instance.makefood();
        }
    }
······
}

四·结语

        我们已经完成了贪吃蛇游戏的基本界面搭建和部分功能组件的创建。后续还需要通过编写脚本代码来实现游戏的逻辑功能,如蛇的移动、吃食物、得分计算、碰撞检测等。希望这个教程能帮助你顺利完成贪吃蛇游戏的制作,如果你在制作过程中遇到任何问题,欢迎在评论区留言交流。

2.Unity的基础概念和基本使用(一看就会) 本篇文章来进一步了解Unity,主要讲述一下几个比较重要的基础概念和Unity的基本使用。场景是一组游戏对象的集合,游戏对象是一个装组件的容器,组件是游戏对象的功能模块,Unity是面向组件开发 世界坐标系(World Position)、本地坐标系(Local Position) 常用快捷键 点击Q:左击拖拽场景,右击拖放旋转世界;点击W:移动 变换切换 轴心pivot、锚点anchor 视图切换 ISO:Orthographic,正交视图模式;Persp:Perspective,透视视图模式 阅读详情

相关推荐

Unity贪吃蛇实战:从MVC架构到完整游戏开发流程详解

在游戏开发领域,MVC(模型-视图-控制器)架构是一种经典的设计模式,它通过分离数据、表现和控制逻辑,实现代码的高内聚与低耦合,从而提升项目的可维护性和扩展性。其核心原理在于将游戏状态、对象属性等数据管理归入Model层,将UI、精灵渲染等视觉表现归入View层,而用户输入、游戏逻辑流转则由Controller层协调。这种架构的价值在于,即使对于贪吃蛇这类规则简单的项目,也能培养出清晰、可复用的工程思维。在Unity引擎中,开发者可以结合预制体(Prefab)、碰撞检测(Collider)和协程(Corou

weixin_29006701的博客 304

【Unity3D入门教程】Unity3D简介、安装和程序发布

Unity3D是一个跨平台的游戏开发引擎,它能够帮助开发者快速构建游戏场景,进行游戏开发与发布。它支持将开发好的作品发布到Windows、Mac OS、Android、iOS、Linux等多种平台。另外,Unity3D官方版本目前可以运行在Windows和Mac OS上,当然还有可以运行在Linux上的非官方版本。

雁回晴空的博客专栏 5万+

unity3D贪吃蛇Demo

一个小巧的用unity开发的贪吃蛇游戏,下载下来即可运行,适合新手学习,代码逻辑清晰,可以二次开发,当前是用2019.4.30版本开发的,支持更高的版本。

unity入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

伴随游戏行业的兴起,unity引擎的使用越来越普遍,本文章主要记录博主本人入门unity的相关记录大部分依赖siki学院进行整理。在新建完成后会在创建的目录下生成相关工程文件如图所示:Assets: 资源(场景脚本模型)Library: 库(系统)Logs: 日志Packages: 导入的包ProjectSettings: 工程设置Temp: 临时文件(文件过大可以删除部分缓存)UserSettings: 设置未完工暂无题外话初入计算机行业的人或者。

A1_3_9_7的博客 1万+

Unity游戏源码贪吃蛇大作战LastSnake

Unity游戏源码贪吃蛇大作战LastSnake提取方式是百度网盘分享地址

Unity 3D贪吃蛇游戏源码.zip

Unity 3D贪吃蛇游戏源码.

Unity百游修炼22(上)——C#和Unity实现贪吃蛇(含完整项目流程及源项目素材)

贪吃蛇

徽程22级的在读学生 1840

基于结构的虚拟筛选模型 gnina 从源码编译

所需要的软件安装包: 安装 CUDA 装的时候看着点,第二个要你装驱动的选择,回答N,不装。 sudo sh cuda_10.0.130_410.48_linux.run sudo vim ~/.bashrc 在 ~/.bashrc 文件最后加上 export PATH=/usr/bin:/usr/local/cuda-10.0/bin${PATH} export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH} source ~

周迪新的博客 3187

Unity开发之-Unity入门简介(近万字攻略)

前言 大家好,我是一个Unity的程序员,从这篇开始我会持续更新学习Unity的基本,去帮助想要学习unity的小伙伴,有兴趣的同学可以跟着我一起学习Unity,下面,我们将要开始了解Unity以及想要制作一款游戏需要具备的知识。 文章目录前言unity的学习路线 unity的学习路线 ...

想吃烤地瓜的博客 6万+

CST-Python(Pycharm如何与CST联合仿真,获取S参数)

我们想使用Python与CST联合仿真,其实是不需要自己下载Python的,因为CST在下载的时候就自带了Python3.6,我们只需要找到并将软件的环境设置到相应位置,即可联合仿真。(我的保存路径为D:\Program Files (x86)\CST Studio Suite 2020,在寻找时可以将前面切换成自己的保存路径,后面不需要修改)在CST帮助文档(打开CST软件,按F11即可直接访问帮助文档)里面,进行如下操作,便可以看到CST适配的Python版本为Python3.6!

weixin_52696285的博客 5648

科研生产力革命:手把手教你打造基于大模型的Research Agent(文献调研+论文写作+思路激发)

本文介绍了如何利用Research Agent(科研智能体)提升科研效率。Research Agent能自主完成文献检索、信息整合和报告生成全流程,省去50%以上的基础工作时间。文章详细讲解了搭建运行环境的方法,包括工具准备和MetaGPT配置,并提供了两种实战方案:基础版Search-O1和专业版MetaGPT Research Agent。此外,还介绍了如何为垂直领域定制Agent,以及优化检索效果、改善报告逻辑等技巧。最后列举了学术研究、行业分析、内容创作和个人学习四大应用场景,帮助用户将AI从聊天工

LXY_LOVE36的博客 266

渗透测试——漏洞扫描工具

然后还要将all这个压缩包里的plugin_feed_info.inc提取出来,命令行是 tar -zxvf all-2.0.tar.gz plugin_feed_info.inc,然鹅,我提取不出来。将下载好的插件移动到Nessus目录下,然后输入sudo /opt/nessus/sbin/nessuscli update all-2.0.tar.gz。用户名和密码随便写写就好,随后将会更新补丁,OK,这样Nessus可以使用了。将会获得一串数字,然后去激活码的这个网站,输入自己的邮箱获取激活码。

wuli1024的博客 4994

华为OD机试 - 物流仓储多维度成本利润综合查询系统 - 二维数组(Python/JS/C/C++ 新系统 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。某物流企业在全国多个仓库开展仓储业务,需要对不同仓库、不同时段的入库成本、出库收入和库存损耗进行综合统计分析,用于生成 日报、周报和月报。字段说明及取值范围如下:warehouses: int[] 扁平化数组 [w0d0in, w0d0out,

学Java,找哪吒 307

Unity10分钟回顾指南

🌟 **祝你在Unity创作之路上取得成功!** 🌟

qq_41179365的博客 4460

PINN求解PDE

PINN求解Dirichlet泊松方程 泊松方程引入 −Δu=f,x∈Ω=(0,1)2-\Delta u=f,x \in \Omega=(0,1)^2−Δu=f,x∈Ω=(0,1)2 u=g,x∈∂Ωu=g,x \in \partial \Omegau=g,x∈∂Ω import torch import time import numpy as np import matplotlib.pyplot as plt import torch.nn as nn def UU(X, order,prob):

forrestguang的博客 3804

【图像去噪】论文精读:FM2S: Self-Supervised Fluorescence Microscopy Denoising With Single Noisy Image

论文题目:FM2S: Self-Supervised Fluorescence Microscopy Denoising With Single Noisy Image —— FM2S:单噪声图像自监督荧光显微镜去噪arXiv 2024!显微图像去噪!通过可视化详细的细胞结构和生物过程,荧光显微镜具有显着先进的生物学研究。然而,由于难以精确建模固有噪声和获取干净图像进行训练,这种图像去噪任务往往面临挑战,这限制了大多数现有方法。在本文中,我们提出了一种有效的。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 408

Unity游戏引擎介绍及相关学习资源

Unity(游戏引擎)一般指Unity3D 官网: https://unity.com/ 手册:https://docs.unity3d.com/Manual/ Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,...

纸上得来终觉浅,绝知此事要躬行 1万+

1 电科院FTU检测标准学习笔记-外观检查

作者简介:本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验。

sixtome 1849

unity零基础学习

提示:本人作为萌新记录unity学习路线,后期会根据学习情况不断进行修改 前言 伴随游戏行业的兴起,unity引擎的使用越来越普遍,本文章主要记录博主本人入门unity的相关记录。 一、认识unity引擎? Unity相关信息: Unity支持持的编程语:C#、Mono、JavaScript 大家比较推荐C# 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt im.

lennon4mile的博客 9063

Open3D 使用CPD算法对点云配准【2025最新版】

Coherent Point Drift相干点漂移算法实现点云配准(python代码)博客长期更新,本文最近更新时间为:2025年2月2日。

点云侠的博客 8万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Unity 初步了解

Unity 初步了解

xie__jin__cheng的博客 4305

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Unity3D入门基础知识汇总

创建C#脚本,然后放到物体下面就可以了。

benben044的专栏 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Unity】3D功能开发入门系列(一)

包含开发环境(安装 Unity、创建项目、Unity 窗口布局)、场景与视图(场景、游戏物体、3D 视图、世界坐标系、视野中心、透视与正交)、游戏物体(3D 原生物体、工具选项栏的使用、更多操作)、模型(网格、材质、纹理、外部模型、更多细节、三种 .fbx 文件的使用方式——直接拖拽、材质替换、分解重组)的详细介绍

wanchen_Gabby的博客 9167
上一篇: Unity百游修炼22(上)——C#和Unity实现贪吃蛇(含完整项目流程及源项目素材)
下一篇: C#高级教程(1)—— 深入剖析 C# 命名空间
Unity黑马王子
博客等级 码龄4年 1846粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值