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

相关文章

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、