尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Unity教学 项目2 2D闯关游戏

Unity教学 项目2 2D闯关游戏
📅 发布时间:2026/6/20 19:22:47

视频教程:

https://www.bilibili.com/video/BV1mjXsYXERe?spm_id_from=333.788.videopod.sections&vd_source=25b783f5f945c4507229e9dec657b5bb

1.基本设置

1.1 素材

创建项目

调整布局

基础设置

导入素材

设置人物图片

“过滤模式”三个选项的区别

属性 Point (No Filter) Bilinear Trilinear
插值方式 最近邻插值(Nearest Neighbor) 双线性插值(4 像素加权平均) 三线性插值(Mipmap 层级间平滑过渡)
清晰度 高(像素化明显) 中等(轻微模糊) 中等(更柔和的模糊)
锯齿效果 明显 减少 减少
模糊程度 无 轻微 更高
性能开销 最低 中等 较高
适用场景 像素风格游戏、保持原始像素感的纹理 普通 3D 游戏中的纹理、UI 元素 远距离观察的物体(如地形、远景)
Mipmap 支持 不支持平滑过渡 支持单层 Mipmap 平滑 支持多层 Mipmap 平滑过渡
视觉效果特点 锐利、块状效果 平滑、自然 过渡自然、适合远近视角切换

1.2 场景、叠层

1.2.1 场景

设置森林背景图片

显示“平铺调色盘”

创建瓦片地图相关的文件夹、文件

绘制地图

1.2.2 叠层

新增三个图层

调色板可增加功能按钮

新建瓦片地图

依次设置排序图层

依次设置图层顺序

修改摄像机背景颜色

1.3 规律瓦片

新建文件夹、动画瓦片、规律瓦片

设置规律瓦片规则

设置动画瓦片规则

最终效果

2.玩家

2.1 碰撞体、物理组件

地面

玩家

2.2 输入系统

设置新的输入系统

安装“Input System”包

创建输入系统脚本

2.3 移动翻转

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;public class PlayerController : MonoBehaviour
{[Header("基础参数")]public Vector2 inputDirection;public float speed;public float jumpForce;public PlayerInputContoller inputController;private Rigidbody2D rb;private bool isGrounded;private void Awake(){inputController = new PlayerInputContoller();rb = GetComponent<Rigidbody2D>();}// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){inputDirection = inputController.Player.Move.ReadValue<Vector2>();}private void FixedUpdate(){Move();}private void OnEnable(){inputController.Enable();}private void OnDisable(){inputController.Disable();}void Move(){rb.velocity = new Vector2(inputDirection.x * speed * Time.deltaTime, rb.velocity.y);float faceDir = transform.localScale.x;if(inputDirection.x < 0) faceDir = -1;if(inputDirection.x > 0) faceDir = 1;transform.localScale = new Vector3(faceDir, 1, 1);}
}

2.4 跳跃

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;public class PlayerController : MonoBehaviour
{public Vector2 inputDirection;public float speed;public float jumpForce;public LayerMask groundLayer;public Transform groundCheck;public float groundCheckRadius = 0.2f;public PlayerInputContoller inputController;private Rigidbody2D rb;private bool isGrounded;private void Awake(){inputController = new PlayerInputContoller();rb = GetComponent<Rigidbody2D>();inputController.Player.Jump.started += Jump;}// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){inputDirection = inputController.Player.Move.ReadValue<Vector2>();}private void FixedUpdate(){Move();CheckGround();}private void OnEnable(){inputController.Enable();}private void OnDisable(){inputController.Disable();}void Move(){rb.velocity = new Vector2(inputDirection.x * speed * Time.deltaTime, rb.velocity.y);float faceDir = transform.localScale.x;if(inputDirection.x < 0) faceDir = -1;if(inputDirection.x > 0) faceDir = 1;transform.localScale = new Vector3(faceDir, 1, 1);}private void Jump(InputAction.CallbackContext context){if (isGrounded){Debug.Log("Jumping");rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);isGrounded = false;}else {Debug.Log("Not Jumping, not grounded");}}   private void CheckGround(){isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);}
}

2.5 闲置、移动动画

添加动画控制器、动画片段

设置动画器

代码

2.6 跳跃动画

2.7 受伤

Player

Boar

using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>
/// 角色基础属性管理类,处理生命值和伤害计算
/// </summary>
public class Character : MonoBehaviour
{// 当前生命值public float currentBlood;// 最大生命值public float maxBlood;/// <summary>/// 处理角色受到伤害的方法/// </summary>/// <param name="damage">受到的伤害值</param>public void TakeDamage(float damage){// 减少当前生命值currentBlood -= damage;// 确保生命值不会低于0if (currentBlood < 0) currentBlood = 0;}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.TextCore.Text;/// <summary>
/// 处理攻击行为和伤害判定的组件
/// </summary>
public class Attack : MonoBehaviour
{// 攻击伤害值public float attackValue;// 是否处于无敌状态private bool isInvincible;// 上次造成伤害的时间private float lastTime;// 无敌状态持续时间(单位:秒)private float invincibleDuration = 2f;private void Awake(){// 初始化上次攻击时间lastTime = Time.time;}// Update在每一帧被调用void Update(){// 检查是否需要解除无敌状态if (isInvincible && Time.time - lastTime >= invincibleDuration){isInvincible = false;}}/// <summary>/// 当其他碰撞体持续停留在触发器内时调用/// </summary>/// <param name="collision">与之碰撞的碰撞体</param>private void OnTriggerStay2D(Collider2D collision){// 如果碰撞对象不是玩家,直接返回if (!collision.CompareTag("Player")) return;// 只有在非无敌状态下才造成伤害if (!isInvincible){// 获取被攻击对象的Character组件Character character = collision.GetComponent<Character>();// 对目标造成伤害character.TakeDamage(attackValue);// 进入无敌状态isInvincible = true;// 记录当前时间点lastTime = Time.time;}}
}

受伤动画

2.8 死亡

2.9 攻击

动画

判定

3.敌人

相关新闻

  • 爆炸事件检测与识别 _ 基于YOLOv5-AFPN-P2345模型的改进实现
  • Refine+Next.js+Ant Design实战避坑指南:从版本冲突到性能优化的完整解决方案
  • CosyVoice ONNX模型部署终极指南:5大实战技巧快速掌握

最新新闻

  • MinecraftForge模组开发入门指南:从零开始创建你的第一个游戏模组
  • 杭州买猫狗怎样选?整理4家口碑不错的宠物店 - 园友3800037
  • 2026年国内防抛网厂家 解决品质参差痛点 靠谱选型推荐 - 资讯速览
  • 化妆品品牌全案包装设计服务商|VI + 包装 + 落地一站式全案定制 - 宏洛图品牌设计
  • 汕头本地人私藏牛肉火锅品牌排行 实地探访口碑解析 - 起跑123
  • 2026年上海名饰回收价格表|真实交易案例+防坑攻略 - 奢侈品交易观察员

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号