Unity Sunny Land开发流程(三)

2023-10-08 05:59
文章标签 流程 开发 unity sunny land

本文主要是介绍Unity Sunny Land开发流程(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 0.开发流程一、二
  • 1.视觉差Parallax
  • 2.主菜单MainMenu
  • 3.暂停菜单&AudioMixer&滑动条控制音量
  • 4.手机控制|触控操作|真机测试
  • 5.单向平台
  • 6.移动手感&多段跳
  • 7.音效管理SoundManager(Static)
  • 8.End 游戏生成Build

0.开发流程一、二

  开发流程一:https://blog.csdn.net/xiji333/article/details/109621328
  开发流程二:https://blog.csdn.net/xiji333/article/details/109955327

1.视觉差Parallax

  这一节是为了让你的 2 D 2D 2D平板看起来更有层次感,简单来说就是让背景或者其它的物体以不同于摄像机的速率移动。想要实现这个效果的可以去看视频。

2.主菜单MainMenu

  这一节我们来制作主菜单。涉及到 U I UI UI p a n e l 、 b u t t o n panel、button panelbutton,以及动画效果。
在这里插入图片描述
  可以设置 b u t t o n button button的各种属性,比如默认颜色,高亮颜色,点击时的颜色,不可用时的颜色等等:
在这里插入图片描述
   T e x t M e s h P r o TextMeshPro TextMeshPro文本也可以设置很多属性,比如字体、阴影、颜色(可以设置渐变色)、外发光等等:
在这里插入图片描述
  接下来就是给按钮添加监听了:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;public class MainMenu : MonoBehaviour
{public void Play(){SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);}public void Quit(){
#if UNITY_EDITORUnityEditor.EditorApplication.isPlaying = false;
#elseApplication.Quit();
#endif}
}

  把它挂在到 p a n e l panel panel上,然后给按钮增加监听:
在这里插入图片描述
  然后就可以啦,注意一定不要删除 E v e n t S y s t e m EventSystem EventSystem这个对象。

3.暂停菜单&AudioMixer&滑动条控制音量

  这一节我们将制作一个暂停菜单,虽然比较丑不过主要是为了学一下怎么通过它来控制我们游戏的声音:
在这里插入图片描述

在这里插入图片描述
  把下面的代码挂到 P a u s e P a n e l PausePanel PausePanel上,并设置两个按钮的监听:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PausePanel : MonoBehaviour
{public void Pause(){gameObject.SetActive(true);//慢动作或者加速也可以通过设置这个参数实现!Time.timeScale = 0f;}public void Continue(){gameObject.SetActive(false);Time.timeScale = 1f;}
}

  接下来是关于 A u d i o M i x e r Audio\ Mixer Audio Mixer的介绍。首先自己创建一个 A u d i o M i x e r Audio\ Mixer Audio Mixer,并从菜单打开相关的窗口:
在这里插入图片描述

在这里插入图片描述
   A u d i o M i x e r Audio\ Mixer Audio Mixer可以混合调节多个 A u d i o S o u r c e Audio\ Source Audio Source,只需要修改它的 O u t p u t Output Output
在这里插入图片描述
  你对 A u d i o M i x e r Audio\ Mixer Audio Mixer的设置(音量、音效等等)会影响所有关联到它的 A u d i o S o u r c e Audio\ Source Audio Source的最终播放效果:
在这里插入图片描述
  那么我把滑条的范围设置到 [ − 80 , 20 ] [-80,20] [80,20],再把当前滑条对应的值设置到这里就可以控制音量的大小了。注意 A u d i o M i x e r Audio\ Mixer Audio Mixer是没有办法直接挂载脚本的,我们需要把它的某些属性公开出去(即可以通过代码中的 A u d i o M i x e r Audio\ Mixer Audio Mixer对象访问),首先点击想要公开出去的属性:
在这里插入图片描述
  右键选择:
在这里插入图片描述
  在这里可以看到公开出来的属性,还可以修改名字:
在这里插入图片描述
在这里插入图片描述
  现在来修改代码吧:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;public class PausePanel : MonoBehaviour
{public AudioMixer mainAudioMixer;public void Pause(){gameObject.SetActive(true);//慢动作或者加速也可以通过设置这个参数实现!Time.timeScale = 0f;}public void Continue(){gameObject.SetActive(false);Time.timeScale = 1f;}public void SetVolume(float value){//注意这里的第一个参数要和公开出来的属性的名称一致mainAudioMixer.SetFloat("MainVolume", value);}
}

  设置滑动条的监听:
在这里插入图片描述
在这里插入图片描述
  注意此处不要选择下面的那个同名函数,那个只能设置一个值,上面这个是跟随滑动条动态设置的。
在这里插入图片描述
  接下来我们再增加一个滑动条,用来控制人物跳跃、受伤、攻击、敌人爆炸的音效的大小:
在这里插入图片描述
  新增一个 E f f e c t Effect Effect分组,并设置相关音源的输出、滑动条监听等:
在这里插入图片描述

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;public class PausePanel : MonoBehaviour
{public AudioMixer mainAudioMixer;public void Pause(){gameObject.SetActive(true);//慢动作或者加速也可以通过设置这个参数实现!Time.timeScale = 0f;}public void Continue(){gameObject.SetActive(false);Time.timeScale = 1f;}public void SetMainVolume(float value){//注意这里的第一个参数要和公开出来的属性的名称一致mainAudioMixer.SetFloat("MainVolume", value);}public void SetEffectVolume(float value){mainAudioMixer.SetFloat("EffectVolume", value);}}

在这里插入图片描述
  游玩游戏后你会发现,第二个滑动条只影响分组中与 E f f e c t Effect Effect相关的音源,第一个滑动条不仅影响与 M a s t e r Master Master相关的,还影响与 E f f e c t Effect Effect相关的。那么我们可以得出一个结论,一个分组中的主 M i x e r Mixer Mixer影响其余所有 M i x e r Mixer Mixer
在这里插入图片描述

4.手机控制|触控操作|真机测试

  看视频吧:https://www.bilibili.com/video/BV1GJ411u75o?p=2。

5.单向平台

  如图所示,他目前是一个普通的平台,即玩家从下面不能直接跳上去:
在这里插入图片描述

在这里插入图片描述
  给它添加一个 P l a t f o r m E f f e c t o r 2 D Platform\ Effector\ 2D Platform Effector 2D组件,同时勾选碰撞体的 U s e d B y E f f e c t o r Used\ By\ Effector Used By Effector
在这里插入图片描述
在这里插入图片描述
  现在人物就可以从下面直接跳上来了。

6.移动手感&多段跳

   F i x e d U p d a t e FixedUpdate FixedUpdate的时间间隔是固定的, U p d a t e Update Update的时间间隔是不固定的。当你用代码监听用户的按键( G e t B u t t o n 、 G e t K e y GetButton、GetKey GetButtonGetKey),且希望得到一个实时的反馈时,你需要使用 U p d a t e Update Update;所有跟物理有关的东西应该放到 F i x e d U p d a t e FixedUpdate FixedUpdate中。
在这里插入图片描述
  由于跳跃和下蹲都是需要实时响应的,所以我们把这部分的代码放到 U p d a t e Update Update中,而移动一般来说都是需要用户持续按下方向键的,我们可以把这部分代码放到 F i x e d U p d a t e FixedUpdate FixedUpdate中。下面的代码实现了二段跳,我自己感觉手感还是可以的,注意要把 r i g i d b o d y rigidbody rigidbody中的重力系数调到 2 2 2。不过下面的代码也不是很完美,依然还有很多需要打磨的地方,比如动画状态机中 F a l l Fall Fall H u r t Hurt Hurt的切换,蹲下的时候不能跳跃,跳跃的时候不能蹲下之类的。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class PlayerController : MonoBehaviour
{private Rigidbody2D rb2d;private Animator animator;private BoxCollider2D boxCollider2D;[SerializeField]private int cherry = 0;[SerializeField]private int jumpCount = 2;[SerializeField]private bool isHurt = false;private Vector2 initBoxCollider2DOffset;private Vector2 initBoxCollider2DSize;private Vector2 crouchBoxCollider2DOffset = new Vector2(0, -0.57f);private Vector2 crouchBoxCollider2DSize = new Vector2(0.92f, 0.85f);public Text cherryText;public float speed = 5f;public float jumpForce = 8f;public LayerMask ground;public AudioSource jumpAudio;public AudioSource hurtAudio;public AudioSource pickCherryAudio;// Start is called before the first frame updatevoid Start(){rb2d = GetComponent<Rigidbody2D>();animator = GetComponent<Animator>();boxCollider2D = GetComponent<BoxCollider2D>();initBoxCollider2DOffset = boxCollider2D.offset;initBoxCollider2DSize = boxCollider2D.size;}// Update is called once per framevoid Update(){Jump();Crouch();SwitchAnimation();}private void FixedUpdate(){if (!isHurt)//非受伤状态{Movement();}}void Jump(){if (boxCollider2D.IsTouchingLayers(ground) && !animator.GetBool("jumping"))jumpCount = 2;if (Input.GetButtonDown("Jump") && jumpCount > 0){rb2d.velocity = new Vector2(rb2d.velocity.x, jumpForce);animator.SetBool("jumping", true);jumpAudio.Play();--jumpCount;}}void Movement(){float horizontalMove = Input.GetAxis("Horizontal");int faceDirection = (int)Input.GetAxisRaw("Horizontal");rb2d.velocity = new Vector2(faceDirection * speed, rb2d.velocity.y);animator.SetFloat("running", Mathf.Abs(horizontalMove));if (faceDirection != 0){transform.localScale = new Vector3(faceDirection, 1, 1);}}void Crouch(){//头顶上没有障碍物if (!Physics2D.OverlapCircle(transform.position, 0.4f, ground)){//持续按下if (Input.GetButton("Crouch")){animator.SetBool("crouching", true);boxCollider2D.offset = crouchBoxCollider2DOffset;boxCollider2D.size = crouchBoxCollider2DSize;}else{animator.SetBool("crouching", false);boxCollider2D.offset = initBoxCollider2DOffset;boxCollider2D.size = initBoxCollider2DSize;}}}void SwitchAnimation(){if (rb2d.velocity.y < 0 && !boxCollider2D.IsTouchingLayers(ground)) //y轴速度<0且没有接触到地面时{animator.SetBool("falling", true);}if (animator.GetBool("jumping")) //跳跃状态{if (rb2d.velocity.y < 0){animator.SetBool("jumping", false);animator.SetBool("falling", true);}}else if (animator.GetBool("falling")) //下落状态{if (boxCollider2D.IsTouchingLayers(ground)){animator.SetBool("falling", false);}}else if (isHurt) //受伤状态{animator.SetBool("hurt", true);int sign = rb2d.velocity.x < 0 ? -1 : 1;rb2d.velocity += new Vector2(speed * Time.deltaTime, 0f) * -sign;if (Mathf.Abs(rb2d.velocity.x) < 0.1f){isHurt = false;animator.SetBool("hurt", false);}}}

7.音效管理SoundManager(Static)

  其实就是创建了一个单例类用来管理场景中的声音,想学的可以看视频学习。我觉得它的不足之处就是同一时间只能播放一个 c l i p clip clip,所以就不写啦。

8.End 游戏生成Build

在这里插入图片描述
在这里插入图片描述
  完结撒花~

这篇关于Unity Sunny Land开发流程(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/163185

相关文章

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat