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

相关文章

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

使用JavaConfig配置Spring的流程步骤

《使用JavaConfig配置Spring的流程步骤》JavaConfig是Spring框架提供的一种基于Java的配置方式,它通过使用@Configuration注解标记的类来替代传统的XML配置文... 目录一、什么是 JavaConfig?1. 核心注解2. 与 XML 配置的对比二、JavaConf