【Unity/UI】实践记录-button的click等事件的管理

说在前面

  • Unity版本:2017.4.37
  • NGUI版本:3.11.2
  • 其他:本篇文章中使用到了NGUI插件,但是不影响理解方法。同时,涉及了c#的委托,和函数指针有些类似,不熟悉的建议查阅相关资料

说明

  • 通常按钮是放在某个容器中,例如Panel,并且这个容器可能包含不止一个按钮(例如关闭、主要功能等),如果为每一个按钮都“直接”绑定相应的事件,就不便于管理

在这里插入图片描述

  • 一个相对合适的实践是这样的,在每一个button类中声明委托,在包含这些button“容器类”中确定每一个button中委托的指向,这样就可以在这个“容器类”中统一管理该容器下所有button的事件(如上图)。

实例

  • 界面

    • 层次结构如下
      在这里插入图片描述

    • Panel配置如下,最后的Panel(Script)为自定义脚本(见后面代码),需要将上面的button1/2/3拖动过去(或者点后面的小圆点)
      在这里插入图片描述

    • Button配置如下,其他两个基本相同,注意Box ColliderButton Listener为自定义脚本(代码见后面)
      在这里插入图片描述

  • 代码

    • Panel
      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class Panel : MonoBehaviour {
      
          public GameObject button1; // 对应上面panel脚本中的button1
          public GameObject button2;
          public GameObject button3;
      
          private void Awake()
          {
              ButtonListener.Get(button1).onClick = OnButton1Click; // 确定每一个button委托的指向
              ButtonListener.Get(button2).onClick = OnButton2Click;
              ButtonListener.Get(button3).onClick = OnButton3Click;
          }
      
          private void OnButton1Click(GameObject go) // button1对应的click事件
          {
              Debug.Log("Button 1 clicked!");
          }
      
          private void OnButton2Click(GameObject go)
          {
              Debug.Log("Button 2 clicked!");
          }
      
          private void OnButton3Click(GameObject go)
          {
              Debug.Log("Button 3 clicked!");
          }
      
      }
      
    • ButtonListener
      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class ButtonListener : MonoBehaviour {
      
          public delegate void VoidDelegate(GameObject go);
      
          public VoidDelegate onClick; 
      
      	void  OnClick()
          {
              if(onClick != null) // 若该委托不为空
              {
                  onClick(gameObject); // 那么就调用该委托(指向的函数),gameObject为自身
              }
          }
      
          public static ButtonListener Get(GameObject go)
          {
              ButtonListener listener = go.GetComponent<ButtonListener>();
              if (listener == null)
                  listener = go.AddComponent<ButtonListener>();// 防止未创建
              return listener;
          }
      }
      
      
  • 结果

    • 界面
      在这里插入图片描述

    • 运行后,点击对应的按钮,在Console输出结果如下
      在这里插入图片描述

首先,你需要在 Unity 中导入一个视频文件。这可以通过将视频文件拖放到 Unity 项目中的 Assets 文件夹中来完成。Unity 支持许多常见的视频格式,如 MP4、MOV 等。 接下来,你需要创建一个 UI 按钮,使用户能够触发视频的播放。可以通过在 Unity 中创建一个 UI Canvas,然后在该 Canvas 上添加一个 Button 组件来实现这一点。 一旦你有了一个按钮,你需要将其链接到播放视频的代码。这可以通过使用 Unity事件系统来完成。在 Button 组件上,你可以添加一个 On Click 事件,并将其链接到一个脚本中的函数。 下面是一个示例代码,用于在 Unity UI 中播放视频: ```csharp using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; public class VideoPlayerController : MonoBehaviour { // 视频文件 public VideoClip videoClip; // 视频播放器 private VideoPlayer videoPlayer; // 视频渲染器 private RawImage rawImage; // Start is called before the first frame update void Start() { // 获取视频播放器组件 videoPlayer = GetComponent<VideoPlayer>(); // 获取视频渲染器组件 rawImage = GetComponent<RawImage>(); // 将视频文件分配给视频播放器 videoPlayer.clip = videoClip; // 将视频渲染器分配给视频播放器 videoPlayer.targetTexture = (RenderTexture)rawImage.texture; // 暂停视频播放 videoPlayer.Pause(); } // 播放按钮事件 public void PlayVideo() { // 播放视频 videoPlayer.Play(); } // 暂停按钮事件 public void PauseVideo() { // 暂停视频 videoPlayer.Pause(); } // 停止按钮事件 public void StopVideo() { // 停止视频 videoPlayer.Stop(); } } ``` 在上述代码中,我们首先获取了视频播放器和视频渲染器组件。然后,我们将视频文件和视频渲染器分配给视频播放器。最后,我们定义了三个事件,用于播放、暂停和停止视频。 现在,你可以将上述脚本添加到 UI 按钮上,并在 On Click 事件中链接到相应的事件函数。这样,当用户单击该按钮时,视频将开始播放。 注意:上述代码仅适用于 Unity 5.6 或更高版本。如果你使用的是早期版本的 Unity,则可能需要进行一些更改。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值