当前位置: 首页 > news >正文

unity2D跑酷游戏

项目成果 项目网盘

导入资源包 放入Assets文件Assets资源文件

游戏流程分析

摄像机size调小,让图片占满屏幕
人跑本质,相对运动,图片无限向右滚动
图片720,缩小100倍第二个图片x为7.2每unit px100两张图片刚好挨着连贯

空对象BgControl,方便管理
reset
放两张图片
创脚本Bgcontrol,拖到该对象上
层级-10
脚本文件夹,c#脚本
地面对象
层级-5
碰撞组件box collider 2d,编辑碰撞器。
挂脚本
三个地面都拖成预设体
前两个地面固定,后一个随机
Prefabs预设体文件夹
ground拖进去
coin进去
切片
多张
sprite editor 
切片
应用
对象声音,挂脚本
单例
创建groundcontrol脚本
脚本挂到地面对象上
预设体相当于类和对象

背景 -10
地面  -5地面预设体给标签ground 碰撞器
声音 挂脚本
动画  窗口 跑 跳 死亡   过渡 设置参数
        无退出,过渡0,isjump true
主角  层级10  标签player 碰撞组件 刚体组件 冻结旋转 重力缩放2,只提供重力加速度,加脚本(跳跃,地面上才能跳跃,播放声音,动画切换),
button UI 原图像 原像素显示,过渡 精灵切换 高亮图像   点击 玩家的跳跃 导航none
金币 脚本 碰撞器 吃的触发
桌子 放1号地面上 碰撞器 标签地面 预设体  
     1地应用所有
死亡  空对象die 碰撞器 编辑触发器 标签die
   player脚本
敌人 圆形碰撞器 1地 标签enemy 1地应用所有 预设体 触发
层级
切片
 

脚本代码

PlayerControl

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerControl : MonoBehaviour
{//血量public static int Hp=1;//刚体组件private Rigidbody2D rbody;//动画组件private Animator ani;private bool isGround;void Start(){//获取刚体组件rbody = GetComponent<Rigidbody2D>();//获取动画组件ani = GetComponent<Animator>();}void Update(){//如果按了空格键if (Input.GetKeyDown(KeyCode.Space)){//跳跃Jump();}}//跳跃public void Jump(){if (isGround == true){//给刚体一个向上的力rbody.AddForce(Vector2.up * 400);//播放跳跃声音AudioManager.Instance.Play("跳");}}//发生碰撞private void OnCollisionEnter2D(Collision2D collision){//判断如果是地面if(collision.collider.tag=="Ground"){isGround = true;//结束跳跃ani.SetBool("IsJump", false);}//如果是死亡边界if(collision.collider.tag=="Die" && Hp > 0){//血量为0Hp = 0;////播放死亡声音AudioManager.Instance.Play("Boss死了");//播放死亡动画ani.SetBool("IsDie", true);}}//结束碰撞private void OnCollisionExit2D(Collision2D collision){//判断如果是地面if (collision.collider.tag == "Ground"){isGround = false;//开始跳跃ani.SetBool("IsJump", true);}}//如果碰到敌人private void OnTriggerEnter2D(Collider2D collision){if (collision.tag == "Enemy"){//血量为0Hp = 0;////播放死亡声音AudioManager.Instance.Play("Boss死了");//播放死亡动画ani.SetBool("IsDie", true);}}
}

CoinControl 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CoinControl : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}//如果产生触发private void OnTriggerEnter2D(Collider2D collision){//播放吃金币的声音AudioManager.Instance.Play("金币");//销毁自己Destroy(gameObject);}
}

AudioMnager

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AudioManager : MonoBehaviour
{//单例public static AudioManager Instance;//播放组件private AudioSource player;void Start(){//单例Instance = this;//获取播放组件player = GetComponent<AudioSource>();}//播放音效public void Play(string name){//通过名称获取音频片段AudioClip clip = Resources.Load<AudioClip>(name);//播放player.PlayOneShot(clip);}
}

BgControl

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class BgControl : MonoBehaviour
{//速度 每帧移动0.2像素public float Speed = 0.2f;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update()   //update是每一帧会调用一次{//如果玩家血量为0if(PlayerControl.Hp==0){return;}//遍历背景,背景就是子物体foreach (Transform tran in transform){//获取子物体的位置Vector3 pos = tran.position;//按照速度向左侧移动pos.x -= Speed * Time.deltaTime;  //每秒向左侧移动0.2//判断是否出了屏幕if (pos.x < -7.2f){//把图片移动到右边pos.x += 7.2f * 2;}//位置赋给子物体tran.position = pos;}}
}

GroundControl

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class GroundControl : MonoBehaviour
{//速度public float Speed = 2f;//要随机的地面数组public GameObject[] GroundPrefabs;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update()   //update是每一帧会调用一次{//如果玩家血量为0if (PlayerControl.Hp == 0){return;}//遍历背景,背景就是子物体foreach (Transform tran in transform){//获取子物体的位置Vector3 pos = tran.position;//按照速度向左侧移动pos.x -= Speed * Time.deltaTime;  //每秒向左侧移动0.2//判断是否出了屏幕if (pos.x < -7.2f){//创建新的地面Transform newTrans = Instantiate(GroundPrefabs[Random.Range(0, GroundPrefabs.Length)], transform).transform;
// ,后transform确定父子关系   .后transform拿到新地面的transform组件//获取新地面的位置Vector2 newPos = newTrans.position;//设置新地面的位置newPos.x = pos.x + 7.2f * 2;//位置设置回去newTrans.position = newPos;//销毁旧的地面(出了屏幕的地面)Destroy(tran.gameObject);}//位置赋给子物体tran.position = pos;}}
}

相关文章:

unity2D跑酷游戏

项目成果 项目网盘 导入资源包 放入Assets文件Assets资源文件 游戏流程分析 摄像机size调小&#xff0c;让图片占满屏幕 人跑本质&#xff0c;相对运动&#xff0c;图片无限向右滚动 图片720&#xff0c;缩小100倍第二个图片x为7.2每unit px100两张图片刚好挨着连贯 空对象Bg…...

OWASP top10--SQL注入(四、sqlmap安装及使用)

目录 sqlmap工具安装&#xff1a; 工具说明&#xff1a; 主要功能特性包括&#xff1a; 基本使用示例&#xff1a; 先下载python2.7.9版本 sqlmap运行 sqlmap工具使用 -u -r –-levelLEVEL扫描深度级别 --riskRISK 执行测试的风险 -threads 线程数 -batch-smart智能…...

Java基础入门day62

day62 AJAX 概念 AJAX&#xff1a; Asynchronous Javascript And XML AJAX是一种无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术 AJAX是一种用于创建快速动态网页的技术 通过在后台与服务器进行少量数据交换&#xff0c;AJAX可以使网页实现异步更新 传统…...

Oracle中两张表具有相同结构,如何将一张表内容全部插入到另一个表中

在Oracle中&#xff0c;如果两张表具有相同的结构&#xff0c;你可以使用INSERT INTO ... SELECT语句将一张表的内容插入到另一张表中。以下是一个示例&#xff1a; 假设有两个表&#xff1a;table1 和 table2&#xff0c;它们具有相同的列结构。要将 table1 的所有内容插入到…...

比特币的理论上限是多少个?

标签&#xff1a; 比特币的理论上限&#xff1b; 已经挖出多少个比特币&#xff1b; 问题&#xff1a;比特币的理论上限是多少个&#xff1f;截至2023年10月&#xff0c;已经挖出多少个比特币出来了&#xff1f; 比特币的理论上限 比特币的设计者中本聪在比特币协议中设定了比…...

LeetCode-131 分割回文串

LeetCode-131 分割回文串 题目描述解题思路C 代码 题目描述 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串。返回 s 所有可能的分割方案。 示例 1&#xff1a; 输入&#xff1a;s “aab” 输出&#xff1a;[[“a”,“a”,“b”],…...

Flutter 中的 SliverPrototypeExtentList 小部件:全面指南

Flutter 中的 SliverPrototypeExtentList 小部件&#xff1a;全面指南 Flutter 是一个功能强大的 UI 框架&#xff0c;由 Google 开发&#xff0c;允许开发者使用 Dart 语言构建跨平台的移动、Web 和桌面应用。在 Flutter 的丰富组件库中&#xff0c;SliverPrototypeExtentLis…...

NeuralForecast 推理 - 数据集从文件dataset.pkl读

NeuralForecast 推理 - 数据集从文件dataset.pkl读 flyfish from ray import tune from neuralforecast.core import NeuralForecast from neuralforecast.auto import AutoMLP from neuralforecast.models import NBEATS, NHITS import torch import torch.nn as nn import …...

TS-类型转换(显式)

1.将其他类型转换为布尔类型 要将其他类型转换为布尔类型&#xff0c;只需要将待转换的值传入Boolean()函数 var msg: string "ok"; var msgToBollean: boolean Boolean(msg); //得到trueBoolean()函数会判断传入的值是空值还是非空值。 若表示非空值&#xff0…...

protobufjs 配置踩坑记录

本文主要是小程序使用PB协议&#xff0c;以下时博主遇到的问题以及解决办法。 1、安装protobufjs npm install --save protobufjs 注意&#xff1a;我之前也使用过 npm install -g protobufjs去安装&#xff0c;但是出现以下的问题&#xff0c;关键是我使用sudo 清除相关文件…...

freeswitch官方仓库

概述 在使用源代码编译安装freeswitch的过程中&#xff0c;我们经常需要一些依赖库&#xff0c;其中freeswitch官方的yum源仓库是最齐全最方便的。 但是&#xff0c;freeswitch仓库的配置和使用需要先在signalwire网站注册账号并获取PAT&#xff08;personal access token&am…...

element ui el-calendar日历组件完整代码

el-calendar日历组件完整代码 1. 说在前面2. 日历整体代码3. 编辑与新增 1. 说在前面 最近一直忙于上班&#xff0c;没咋看博客&#xff0c;发现很多小伙伴都要日历组件的代码&#xff0c;于是今天抽空给大家整理一下&#xff0c;为爱发电&#xff01;日历组件的原文在这里&am…...

初识java——javaSE(8)异常

文章目录 一 异常的概念与体系结构1.1 什么是异常&#xff1f;1.2 异常的体系结构&#xff01;1.3 编译时异常与运行时异常与Error编译时异常&#xff1a;异常声明&#xff1a;throws关键字 运行时异常&#xff1a;什么是Error? 二 处理异常2.1 异常的抛出&#xff1a;throw(注…...

C语言面试题11至20题

探索编程面试题&#xff1a;深度解析11至20题 在编程面试中&#xff0c;经常会遇到一些需要深入理解计算机科学基础和编程原理的问题。以下是对一些常见面试题的详细解答&#xff0c;涵盖递归、循环控制、内存管理等关键概念。 11. 递归函数定义没有问题&#xff0c;递归深层…...

视频汇聚EasyCVR综合安防平台对接GA/T1400公安视图库及应用方案

随着科技的不断进步&#xff0c;视频监控系统在公共安全领域发挥着越来越重要的作用。GA/T1400公安视图库作为公安视频图像信息应用系统的标准&#xff0c;为视频监控系统的对接提供了统一的规范和技术要求。 GA/T1400标准的应用范围广泛&#xff0c;涵盖了公安系统的视频图像信…...

在Github找自己想要的的项目

点击进入github 1.首先进入到github的首页&#xff1b;搜索框搜&#xff08;先关键字搜索&#xff09;in:name 你的找的项目 比如&#xff1a; in:name Sping Boot2.进一步检索&#xff08;点赞数高的&#xff09; in:name Sping Boot star:>1000 3.如何要找最新的&…...

第16篇:JTAG UART IP应用<三>

Q&#xff1a;如何通过HAL API函数库访问JTAG UART&#xff1f; A&#xff1a;Quartus硬件工程以及Platform Designer系统也和第一个Nios II工程--Hello_World的Quartus硬件工程一样。 Nios II软件工程对应的C程序调用HAL API函数&#xff0c;如open用于打开和创建文件&#…...

Python——Selenium快速上手+方法(一站式解决问题)

目录 前言 一、Selenium是什么 二、Python安装Selenium 1、安装Selenium第三方库 2、下载浏览器驱动 3、使用Python来打开浏览器 三、Selenium的初始化 四、Selenium获取网页元素 4.1、获取元素的实用方法 1、模糊匹配获取元素 & 联合多个样式 2、使用拉姆达表达式 3、加上…...

2024最新群智能优化算法:大甘蔗鼠算法(Greater Cane Rat Algorithm,GCRA)求解23个函数,提供MATLAB代码

一、大甘蔗鼠算法 大甘蔗鼠算法&#xff08;Greater Cane Rat Algorithm&#xff0c;GCRA&#xff09;由Jeffrey O. Agushaka等人于2024年提出&#xff0c;该算法模拟大甘蔗鼠的智能觅食行为。 参考文献 [1]Agushaka J O, Ezugwu A E, Saha A K, et al. Greater Cane Rat Alg…...

苍穹外卖数据可视化

文章目录 1、用户统计2、订单统计3、销量排名Top10 1、用户统计 所谓用户统计&#xff0c;实际上统计的是用户的数量。通过折线图来展示&#xff0c;上面这根蓝色线代表的是用户总量&#xff0c;下边这根绿色线代表的是新增用户数量&#xff0c;是具体到每一天。所以说用户统计…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题&#xff0c;进而引发后续程序异常。使用工具进行标准化操作&#xff0c;能有效降低出错概率。 需要快速整理大量文件的技术用户而言&#xff0c;这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB&#xff0c;…...

Tauri2学习笔记

教程地址&#xff1a;https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引&#xff1a;https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多&#xff0c;我按照Tauri1的教程来学习&…...

VSCode 使用CMake 构建 Qt 5 窗口程序

首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...