Unity如何动态改变文本框的值,并实现吃金币加分并播放音效的功能

在Unity编辑器当中,我们可以手动修改文本框的内容,但是在游戏游玩过程当中,我们想通过触发特定事件动态改变文本内容,例如角色吃到金币之后会加分并显示到右上角,那该如何实现呢?

首先创建文本框

创建两个,分别在文本框输入分数:以及0(注:不一定是0,可以是其他内容)

然后拖拽到你觉得满意的地方,例如右上角

接下来,创建一个C#脚本,命名随意(这里我命名为GamePlayer)

然后,创建一个浮点型变量,命名为score。再重写一个方法,在Visual Studio中输入OnCollisionEnter自动跳出,这个方法是脚本挂载的物体被其他物体碰撞的时候执行的,然后判断碰撞的物体是不是金币,即

 if (collision.gameObject.name == "GoldCoin")
        {
            Destroy(collision.gameObject);
            GameObject.Find("DonnotDestory").GetComponent<DonnotDestory>().score += 20;
            source.Play();
        }

具体代码如下:

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

public class GamePlayer : MonoBehaviour
{
    public float score;//定义分数变量
    private AudioSource source;//音效组件
    void Start()
    {
        source = GetComponent<AudioSource>();//初始化音效组件
    }
    void Update()
    {

    }
    private void OnCollisionEnter(Collision collision)//有物体碰撞时执行这个方法
    {
       
        if (collision.gameObject.name == "GoldCoin")//如果碰撞的物体名为"GoidCoin"
        {
            Destroy(collision.gameObject);//让被吃的金币在场景中消失
            score += 20;//加20分
            source.Play();//播放音效
        }
    }
}

 然后,把这个脚本拖拽到主角身上(在Hierarchy视图)

再创建个脚本,我命名为ScoreText

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ScoreText : MonoBehaviour
{
    private Text m_Text;//定义文本组件
    public GameObject player; 
    void Start()
    {
        m_Text = GetComponent<Text>();
        player = GameObject.Find("ThirdPersonController_LITE");
        //Find括号里面填的是主角在场景中的名字,这一步很关键
        //以上两个代码很耗系统资源,所以尽量不要写在Update里面
    }

    void Update()
    {
        m_Text.text = player.GetComponent<GamePlayer>().score.ToString();
        //让文本框显示的内容等同于主角目录下GamePlayer脚本当中的score变量的值,并且转化为String
    }
}

然后挂载到显示数值的文本框中

这样,实现动态文本框的功能就完成了,不过依然跑不起来,因为刚刚我在第一个脚本中写了关于音效的代码,现在还没用上。

我们回到主角的属性中,添加一个组件,叫Audio Source

然后,把音频资源拖拽到这里(音频资源可以去爱给网找)

 

 这样,就完成了,现在试试效果

 

 

以上,效果已经实现了

补充一点,如果像我这样,让文本框好看一些:在文本框层次之上再套个Image组件,然后再拖入你想要的图片即可,字体颜色可以在文本框组件里面改

猜你喜欢

转载自blog.csdn.net/Kanagawa_Kento/article/details/125022992
今日推荐