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组件,然后再拖入你想要的图片即可,字体颜色可以在文本框组件里面改

 

 

 

Unity中实例化文本框并在不同间隔下生成文字,通常涉及到以下步骤: 1. 创建文本框预制件(Prefab):首先需要在Unity编辑器中创建一个UI Text元素,并将其保存为预制件,这样在代码中就可以重复使用这个预制件了。 2. 编写脚本实例化文本框:在Unity脚本中,你需要编写代码来实例化预制件,并在合适的位置生成文本框。 3. 控制文字生成的间隔:可以通过协程(Coroutine)或者其他计时器机制来控制文字生成的时间间隔。 以下是一个简单的示例代码,展示如何在Unity中实例化文本框并在不同间隔下生成文字: ```csharp using UnityEngine; using UnityEngine.UI; // 引入UI命名空间 using System.Collections; // 引入协程支持 public class TextGenerator : MonoBehaviour { public GameObject textPrefab; // 文本框预制件 public Transform textSpawnPoint; // 文本生成位置 private float timeInterval = 2f; // 文字生成的时间间隔 void Start() { StartCoroutine(GenerateText()); } IEnumerator GenerateText() { while (true) { // 实例化预制件 GameObject newText = Instantiate(textPrefab, textSpawnPoint.position, Quaternion.identity); // 设置文本内容 newText.GetComponent<Text>().text = "生成的文字"; // 等待指定的间隔时间 yield return new WaitForSeconds(timeInterval); } } } ``` 在这个示例中,`textPrefab` 是你在编辑器中创建的UI Text预制件,`textSpawnPoint` 是一个Transform组件,它指定了文本框实例化的位置。`timeInterval` 是文字生成的时间间隔,通过修改这个可以控制间隔时间。 请确保你的预制件中已经包含了`Text`组件,否则实例化后的文本框将无法显示文本
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值