空洞骑士:简单开场场景搭建

  • 进入这个篇章,我们就离开了新手保护区了,更广阔更高深的内容会越来越多,推掉重做的东西也会更多,我自己都不敢保证能做完QAQ(小声BB)。

开场图片的渐入渐出

首先创建一个新的场景,并将其拖到Build Settings

创建一个Panel,并将开场图片拖进Souece Image,这样一个开场图就有了。

创建渐入渐出动画,选中图片,在上方工具栏里点击windows,创建一个Animatoin,记得将Controller拖进Animator里面

开始录制颜色变化动画(自行调节颜色,前面说过只要给出两端点的状态,unity就好自动在每帧上添加变化)

代码控制场景的切换

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class changeBackground : MonoBehaviour
{
    public Animator anim;
    AnimatorStateInfo stateinfo;//判段动画播放状态

    private void Start()
    {
        anim = GetComponent<Animator>();
    }

    void Update()
    {
        stateinfo = anim.GetCurrentAnimatorStateInfo(0);
        if (stateinfo.IsName("background") && stateinfo.normalizedTime >= 1.0f)//动画中0为开始,1为完结
        {
            UnityEngine.SceneManagement.SceneManager.LoadScene("Scenes02");//切换场景
        }
    }
}

鼠标的替换

将鼠标图片拖进去,设为Cursor,并勾上Read/write

打开Edit -> Project Settings,将鼠标图标拖进Default Cursor


开始,退出菜单制作

  • 首先制作好菜单背景(我这用的是动图),那么为了切换时不过于唐突,我在背景再上添加了一个Panel,然后用它来制作渐入动画。

  • 添加背景音乐(背景音乐肯定是要挂在背景上的QAQ),这了为任一个物体添加音乐组件(Audio Source)好像大概应该都是可以的(人话:自己看着办)

将音乐文件托入其中,并勾选Loop(循环播放),毕竟你也不想你的菜单背景音播到一半就完了吧!!!


  • 按键的制作

添加一个叫button的UI

先来调节Button

可以为按钮添加背景图片,将A调为0可以将背景变为透明

调节Noemal Color可以实现,当鼠标移到按钮上时变为未调节状态(可以实现按钮背景样式变化,其他功能自行了解)


  • 实现当鼠标悬停在按钮上时播放特定音效

为按钮添加一个Audio Source,并编写播放代码(挂在Button上),并将要播放的音效拖进

Audio Clip

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class backgroundButton : MonoBehaviour,IPointerEnterHandler
{
    private Button button;//获取按键
    private AudioSource au;//获取声音组件
    

    private void Start()
    {
        au = GetComponent<AudioSource>();
        button = GetComponent<Button>();
        
    }

    //鼠标进入按键范围
    public void OnPointerEnter(PointerEventData eventData)
    {
        au.Play();//播放音频,默认为Audio Soure中的Audio Clip
        

        //做什么事都行
    }
    /*//鼠标离开
    public void OnPointerExit(PointerEventData eventData)
    {
        
        //做什么事都行
    }*/
}
  • 实现按钮效果,该脚本挂在Canvas上

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;

public class Button : MonoBehaviour
{
    private AudioSource play;
    public Animator anim;//获取背景的动画
    public Animator an1;//获取按钮背景动画
    public Animator an2;//获取按钮背景动画
    AnimatorStateInfo stateinfo;//判段动画播放状态


    private void Start()
    {
        play = GetComponent<AudioSource>();
    }

    private void Update()
    {
        //当转换动画结束才切换场景
        stateinfo = anim.GetCurrentAnimatorStateInfo(0);
        if (stateinfo.IsName("backgroundChange") && stateinfo.normalizedTime > 1.0f)//动画中0为开始,1为完结
        {
            SceneManager.LoadScene("Scenes01");//切换场景
        }

        if (stateinfo.IsName("backgroundChange1") && stateinfo.normalizedTime > 1.0f)//动画中0为开始,1为完结
        {
            Application.Quit();//退出游戏
        }
    }

    public void playGame()
    {
        play.Play();//播放按下按钮的声音
        an1.Play("playBackground");
        anim.Play("backgroundChange");//为切换场景时更流畅而设置的切换动画
    }

    public void Quit()
    {
        play.Play();
        an2.Play("quitBackground");
        anim.Play("backgroundChange1");
    }
}

在按钮下调用脚本方法

分别是挂载脚本的组件(即Canvas)和脚本中的方法(两个按钮都要加)


  • 实现按下按钮播放音效及切换场景

为Canvas(即按键的父级)添加Audio Source,同上方一样(如果要切换时更流畅则需再背景上创建两段动画,来达到流畅的切换效果)

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;

public class Button : MonoBehaviour
{
    private AudioSource play;
    public Animator anim;//获取背景的动画
    AnimatorStateInfo stateinfo;//判段动画播放状态


    private void Start()
    {
        play = GetComponent<AudioSource>();
    }

    private void Update()
    {
        //当转换动画结束才切换场景
        stateinfo = anim.GetCurrentAnimatorStateInfo(0);
        if (stateinfo.IsName("backgroundChange") && stateinfo.normalizedTime > 1.0f)//动画中0为开始,1为完结
        {
            SceneManager.LoadScene("Scenes01");//切换场景
        }

        if (stateinfo.IsName("backgroundChange1") && stateinfo.normalizedTime > 1.0f)//动画中0为开始,1为完结
        {
            Application.Quit();//退出游戏
        }
    }

    public void playGame()
    {
        play.Play();//播放按下按钮的声音
        anim.Play("backgroundChange");//为切换场景时更流畅而设置的切换动画
    }

    public void Quit()
    {
        play.Play();
        anim.Play("backgroundChange1");
    }
}
  • 如果在切换场景时,背景渐渐变暗了,但按钮的背景没变化时可以为背景添加一个Animator并录制相关动画然后在上面的代码播放即可,也可调节按键的相关参数来达到效果


  • 按钮上的字体

unity中所提供的字体里是没有中文的,我们需要创建一个中文字库和自己满意的字体。

  • 中文字库的创建,将要用到的文字拉到记事本中,命名为ch.txt,编码格式为UTF-16 LE(UTF-8好像也可以,可以试试看)

  • 将字体和包拖入unity中,Window -> TextMeshPro -> Font Asset Creator

将字体(名字要为英文)放进Source Font File中,字体包放入Character File中,点击Generate Font Atals后保存即可

其他选项的用法具体参考官方文档Font Asset Creator properties reference

点击按钮下的组件就可输入按钮上的文字了(其他功能可自行了解)


  • UI对于屏幕的自适应

我们需要简单调节Canvas上的一写参数,让UI对于不同分辨率的屏幕自适应


  • 为保严谨,可以先将项目构建出来,运行试试,看是否达到预期效果

  • 代码没有进行任何优化,仅供参考QAQ~~~

  • 动态背景来源:WallPaper Engine 作者:Ayaki

  • 音效来源:空洞骑士游戏(同下)

  • UI来源:空洞骑士游戏(扣下来的)

  • 以上素材仅用于学习

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值