unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)

这篇具有很好参考价值的文章主要介绍了unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

该文来是学习chutianbo老师的笔记,链接b站

UI的创建

1.右键Hierarchy空白处 UI➡canvas
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
2.这里一共使用了三个素材
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
层级结构
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
UI:初始画布
characters:头像
Mask:遮罩层
healthbar:血条
这里我们先回到UI(也就是一开始创建的Canvas)
我们一开始有用的应该只有渲染模式render Mode,他有三种模式
Screen Space - Overlay:这是默认模式,可以让 Unity 在始终在游戏的上层绘制 UI。大多数应用程序使用此模式,因为它们希望 UI 始终位于最上层以便提供所有信息。
Screen Space - Camera:这种模式在与摄像机对齐的平面上绘制 UI。平面的大小确定为始终填充整个屏幕,这样你就可以四处移动摄像机,并且平面将随摄像机一起移动,从而显示与 Overlay 图形相同的形状。但是,由于平面是在世界中绘制的,而不是在屏幕上层绘制的,因此世界中的对象可以绘制在 UI 的上层。
World Space:这种模式可在世界中的任何位置绘制平面。例如,你可以将此平面用作游戏中的计算机屏幕,或者用作墙壁,或者放在角色的上层。这在 3D 游戏中更有用,因为 UI 会随着距离变小。

3.关于拉动之后图像没有随着一起变化
这里就要使用锚点unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
就是头像四周的小三角形,它可以使我们的子物体在父物体固定的位置上随着父物体变化
4.遮罩层
第一步
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
第二步
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
第三步
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
把这个勾去掉
当然记得把锚点设好
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
这里unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
可以使用alt+右下角那个直接填充父物体,血条填充到遮罩层

5.bug时间
这样子做的话,在后面使用代码控制遮罩层缩减时会出现两端缩小,而不是血条向右减少的过程。
所以记得把Mask的pivot(就是中间那个蓝点)拉到left center(左边中间);

关于代码控制血条变化

主要思路是当血条变化时,遮罩层减少,使血条变短;
官方解释:遮罩是 UI 系统中的一种技术,利用这种技术可以将一张图像用作其他图像的“遮罩”。我们可以看成是第一张图像充当一个模板。第二张图像中与第一张图像重叠的部分是可见的,但另一部分则是隐藏的
创建一个UI脚本下挂到我们的HealthFrame

public class UIHealthBar : MonoBehaviour
{
    // Start is called before the first frame update
    //创建共有静态对象。获取血条本身
    public static UIHealthBar Instance { get; private set; }
    public Image Mask;
    float orignalSize;
    private void Awake()
    {
        Instance = this;
    }
    void Start()
    {
        //设置静态实例为当前类对象
        orignalSize = Mask.rectTransform.rect.width;
    }
    //创建一个方法,用来设置现在mask遮罩层的宽度
    public void SetValue(float value)
    {
        //设置更改mask遮罩层宽度,根据传输过来的宽度进行更改
        Mask.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, orignalSize * value);
    }
    
}

之后在我们主角血量变化函数中调用即可

  UIHealthBar.Instance.SetValue(currentHealth / (float)maxHealth);

简易的音频使用

这里我们就会用到 Audio Source的组件
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
下面说起来比较重要的
AudioClip——加入的音乐素材
Mute——禁音
volume——音量
Play on awake——在游戏开始时播放
Spatial Blend 2d——3d 2d就是全图播放都是一个音量,可以用作bgm,越拉向3d就越立体,会出现方位和位置距离的差别
底下那个函数,指的就是最小距离1时音量达到最大,500时听不见音乐;

关于代码控制音频

和使用其他组件一样

  1. AudioSource audioSource;
  2. 在start中实例化 audioSource = GetComponent();
    3.播放即可,clip即为音频,需要可以自己公开一个加进去;
    public void PlaySound(AudioClip clip)
    {
    //可以有第二个参数音量0-1.0f
    audioSource.PlayOneShot(clip);
    }

关于NPC的气泡实现

unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
这里主要使用了TextMeshPro 创建方式也是在UI中找到就行
下为结构图
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
Dialog:canvas
Image:外面那个背景画
Text:TextMeshPro

问题1:关于字数过长会溢出
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
在overflow中改为page即可
问题2:无法显示中文:
需要自己下字体包,或者去文章底部看老师的gitee中有下载链接
问题3:如何翻页:
使用代码控制,下附代码
脚本挂给NPC,事件发起交给主角;

public class NonPlayerCharacter : MonoBehaviour
{
 public float displaytime=4.0f;
    public GameObject dialogBox;
    float timerDisplay;
    public GameObject dlgTMP;
    TextMeshProUGUI tmTxtBox;
    int totalPages;
    int currentPage = 1;
     void Start()
    {
        dialogBox.SetActive(false);
        timerDisplay = -1.0f;
        tmTxtBox = dlgTMP.GetComponent<TextMeshProUGUI>();
    }
    private void Update()
    {
        totalPages = tmTxtBox.textInfo.pageCount;
        if (timerDisplay >= 0)
        {
            timerDisplay -= Time.deltaTime;
            if (Input.GetKeyUp(KeyCode.Space))
            {
                if (currentPage < totalPages)
                {
                    
                    currentPage++;
                }
                else
                {
                    currentPage = 1;
                }
                
                tmTxtBox.pageToDisplay = currentPage;
            }
        }
        else
        {
            dialogBox.SetActive(false);
        }
    }
    public void DisplayDialog()
    {
        timerDisplay = displaytime;
        dialogBox.SetActive(true);

    }

关于和NPC的互动实现

使用射线碰撞对象实现,我们的NPC对象需要放到NPC层(自己创一个layer);

 if (Input.GetKeyDown(KeyCode.F))
        {
            RaycastHit2D hit =Physics2D.Raycast(rigidbody2dRuby.position+Vector2.up*0.2f,lookDirection,1.5f,LayerMask.GetMask("NPC"));
            if(hit.collider!=null)
            {
                Debug.Log($"对象是{hit.collider.gameObject}");
                NonPlayerCharacter npc = hit.collider.GetComponent<NonPlayerCharacter>();
                if (npc != null)
                {
                    npc.DisplayDialog();
                }
            }
        }

链接:chutianbo老师关于UI的介绍
链接:chutianbo老师字体下载文章来源地址https://www.toymoban.com/news/detail-400145.html

到了这里,关于unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity】简易俄罗斯方块(Tetris)制作

    原视频:https://www.youtube.com/watch?v=T5P8ohdxDjo b站转载:【UNITY】13分钟制作出俄罗斯方块!(附下载)_哔哩哔哩_bilibili 一、背景及方块制作关键点 1、要将背景的左下角移到坐标(0,0)点 2、方块的旋转点设置 3、方块坐标需要在整数值 二、脚本 1、TetrisBlock

    2024年02月05日
    浏览(43)
  • Unity 简易UI管理器

    首先我们需要先定义这么一个UIManager类。 public class UIManager { } UI管理器嘛,顾名思义肯定是用来管理我们游戏中的UI的,而我们游戏当中的UI呢一般是以面板为单位来进行划分的。所以我们还需要一个UI面板类。然后通过我们的UI管理器来管理我们的UI面板。 public class UIPanel {

    2024年02月09日
    浏览(31)
  • Unity初学注意事项,以及最新如何删除云端项目

    作为一个对好玩的事感兴趣的人 近段时间我开始学习Unity了 首先呢,我们得先了解Unity是用于开发游戏的一个开源软件(当然他的专业版还是要收费的,这里指的个人版,初学者都是够用的,个人版开发的游戏也可以发布,只要游戏所赚的金额不超过100000元都是可以不用换的

    2024年02月07日
    浏览(48)
  • Unity基础 音频组件以及音频播放

    在游戏开发中,声音是一个重要的环节。Unity中的声音组件可以帮助开发者轻松地控制游戏中音频的播放、音量、循环等属性,从而实现更好的游戏体验。本文将详细介绍Unity声音组件的相关概念和技术,以及其在游戏、影视等领域的广泛应用和发展前景。       在Unity中想

    2024年02月11日
    浏览(46)
  • Unity快速入门教程-制作一个简易版的计时器Time.deltaTime

    制作游戏的时候,可能会需要到一个计时器,本篇文章附完整计时器代码 本文将简单介绍 一次计时器 和 循环计时器 的代码 Time.deltaTime是帧与帧相减出来的,即 Time.deltaTime=后一帧时间-前一帧时间 ,计算结果由你的电脑配置而定,不是固定值。由于Time.deltaTime的结果是由后一

    2024年02月12日
    浏览(51)
  • U3D游戏角色血条制作并显示血量变化

    关键:利用Slider来制作血条 大概效果: 数字会随着血量变化而变化。 步骤 1、在层级面板中右击,选择UI中的Slider. 2、创建好后,将Slider命名为HealthBar,可以看到层级面板中Slider的结构为,删掉其中的“Handle Slide Area”. 3、在层级面板选中HealthBar,在右侧的检查器窗口可以看到

    2024年02月09日
    浏览(45)
  • Unity 血条及“掉血”缓冲效果

     视频教程:https://www.bilibili.com/video/BV1WJ411778C/?spm_id_from=333.999.0.0vd_source=4a4c35da6aef7094d5990c213c39aa09 使用素材(推荐使用GitZip for github下载):https://github.com/zheyuanzhou/Youtube-Unity-Tutorial/tree/master/EP45_Health%20Bar/Sprites 效果如下图所示: 首先在场景中创建一个新的Canvas,并命名为He

    2024年02月02日
    浏览(32)
  • 【Unity UIToolkit】UIBuilder基础教程-制作简易的对话系统编辑器 3步教你玩转Unity编辑器扩展工具

    随着Unity开发的深入,基本的Unity编辑器界面并不能满足大部分玩家高阶开发的要求。为了提高开发的效率,有针对性的定制化扩展编辑器界面是提高开发效率的不错选择。 今天就给大家带来Unity官方提高的编辑器扩展工具UIToolkit(集成了UIBuilder和UI Debugger等插件)的使用教程。

    2024年02月04日
    浏览(72)
  • Unity实现各种样式的血条

    我将讲述三种不同类型血条UI的实现 第一种是常见的进度条样式的血条实现: 进度条式的血条样式如图示 要实现进度条式的血条,我们需要使用到unity的UI中的滑动条,它分为Slider滑动条,Background滑动条的背景,Fill Area填充条,这个组件就类似于进度条不过带了一个可以按住

    2024年02月03日
    浏览(33)
  • unity 3种办法实现血条效果并实现3d世界血条一直看向摄像机

    普通血条栏: 渐变色血条栏: 缓冲血条栏: 3D场景血条栏跟随玩家移动: 在Canvas下创建一个空物体HP bar,在空物体下方创建3个Image,分别为血条框bar 黑色,最大HP maxHP 白色,和当前HP currentHP 红色。(PS:注意先后顺序以调整显示的图层) 效果: 点击HP bar,添加slider(滑块)

    2024年02月11日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包