URP-UGUI交互功能实现

news2025/4/24 11:54:36

一、非代码层面实现交互(SetActive)

Button :在OnClick()中添加SetActive方法(但是此时只首次有效)

Toggle :在OnClick()中添加动态的SetActive方法

(给开关Toggle添加对目标对象的SetActive方法,此时有动态和静态两种选项。选择动态时,对象的显示与隐藏跟随开关的状态而改变)

二、代码层面交互(滑动条控制旋转速度、按钮改变颜色)

1. 利用Slider滑动条改变物体的旋转速度(实则改变旋转角度)

补充旋转代码知识:

  

(1)首先创建一个Rotate脚本,拖动到用于旋转的对象上,在Rotate脚本中的Upadate方法中添             加this.transform.Rotate(Vector3.up,Angle*Time.deltaTime,Space.Self);用于控制对象的旋             转。其中声明Angle属性的代码为:public float Angle;

(2)然后创建一个脚本,拖动到Canvas上,用于控制UGUI中的滑动条和按钮的行为

(3)在脚本中创建public GameObject obj;   public Slider slider;   public Button Button;

         Obj中用于存放用于旋转的对象,slider中存放滑动条

(4)在Start方法中添加对应的监听功能 : slider.onValueChanged.AddListener(Onslider);

         然后在Onslider方法中将滑动条中的Value值赋予给Rotate脚本中的Angle属性

         public void OnSlider(float value)
         {
              obj.GetComponent<RotatePractice>().speed = slider.value;
          }

    

(5)或者可以直接在Update()方法中添加 obj.GetComponent<RotatePractice>().speed = slider.value; 这样就可以不需要使用监听功能

其中可以使用枚举来选择物体对象的旋转轴

//定义旋转轴

private Vector3 direct;


public enum RotateDirect
{
    X轴正方向,
    X轴负方向,
    Y轴正方向,
    Y轴负方向,
    Z轴正方向,
    Z轴负方向
}

//声明枚举变量
public RotateDirect dir;

void Update()
{
    switch(dir)
    {
        case RotateDirect.X轴正方向:
            direct = Vector3.right; break;
        case RotateDirect.X轴负方向:
            direct = Vector3.left; break;
        case RotateDirect.Y轴正方向:
            direct = Vector3.up; break;
        case RotateDirect.Y轴负方向:
            direct = Vector3.down; break;
        case RotateDirect.Z轴正方向:
            direct= Vector3.forward; break;
        case RotateDirect.Z轴负方向:
            direct = Vector3.back; break;
    }

 //利用滑动条控制速度
 this.transform.Rotate(direct, Angle * Time.deltaTime, Space.Self);

}


2. 利用按钮改变物体对象的颜色(使其生成随机颜色)

在控制UGUI的脚本中添加  public Button button;

在Start方法中添加监听功能 : button.onClick.AddListener(OnButton)

void OnButton()
{
    Debug.Log("111");
    Ghost.GetComponentInChildren<SkinnedMeshRenderer>().sharedMaterial.SetColor("_Color",new Color(Random.value,Random.value,Random.value,1));
}

代码:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
using UnityEngine.UI;

public class Rotate : MonoBehaviour
{
    //旋转的速度
    //public float speed;

    //利用滑动条控制速度
    public float Angle;

    private Vector3 direct;
    public enum RotateDirect
    {
        X轴正方向,
        X轴负方向,
        Y轴正方向,
        Y轴负方向,
        Z轴正方向,
        Z轴负方向
    }
    // Start is called before the first frame update

    //声明枚举变量
    public RotateDirect dir;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        switch(dir)
        {
            case RotateDirect.X轴正方向:
                direct = Vector3.right; break;
            case RotateDirect.X轴负方向:
                direct = Vector3.left; break;
            case RotateDirect.Y轴正方向:
                direct = Vector3.up; break;
            case RotateDirect.Y轴负方向:
                direct = Vector3.down; break;
            case RotateDirect.Z轴正方向:
                direct= Vector3.forward; break;
            case RotateDirect.Z轴负方向:
                direct = Vector3.back; break;
        }
        //自旋转  right代表X轴,up代表Y轴,forward代表Z轴
        //参数分别为旋转轴,旋转的角度,坐标系的选择
        //this.transform.Rotate(Vector3.up,Angle*10*Time.deltaTime,Space.Self);

        //利用滑动条控制速度
        this.transform.Rotate(direct, Angle * Time.deltaTime, Space.Self);

        //第二种,需要四个参数分别是X轴上旋转的角度、Y轴上旋转的角度、Z轴上旋转的角度,模型围绕旋转的坐标系
        //this.transform.Rotate(0, 30 * Time.deltaTime, 0, Space.Self);
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UIInteractive : MonoBehaviour
{
    public GameObject Ghost;
    public Button button;
    public Toggle toggle;
    public Slider slider;  //滑动条

    void Start()
    {
        //当点击按钮时,触发按钮中onClick方法的监听功能
        button.onClick.AddListener(OnButton);
        toggle.onValueChanged.AddListener(OnToggle);
        slider.onValueChanged.AddListener(Onslider);
    }

    //按钮
    void OnButton()
    {
        Debug.Log("111");
        Ghost.GetComponentInChildren<SkinnedMeshRenderer>().sharedMaterial.SetColor("_Color",new Color(Random.value,Random.value,Random.value,1));
    }

    //开关,利用开关设置对象的显示和隐藏; 其中Toggle函数中需要添加一个布尔值的参数
    void OnToggle(bool ison)
    {
        Ghost.SetActive(ison);
    }

    void Onslider(float value)
    {
        //获取怪物身上的脚本组件中的Speed参数
        Ghost.GetComponent<Rotate>().Angle=slider.value;
    }
}

效果展示: 

【太妃糖耶】Up主探索中,欢迎收看求三连!_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2341438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UniGoal 具身导航 | 通用零样本目标导航 CVPR 2025

UniGoal的提出了一个通用的零样本目标导航框架&#xff0c;能够统一处理多种类型的导航任务 &#xff08;如对象类别导航、实例图像目标导航和文本目标导航&#xff09;&#xff0c;而无需针对特定任务进行训练或微调。 它的特点是 图匹配与多阶段探索策略&#xff01;&#x…

通过Quartus II实现Nios II编程

目录 一、认识Nios II二、使用Quartus II 18.0Lite搭建Nios II硬件部分三、软件部分四、运行项目 一、认识Nios II Nios II软核处理器简介 Nios II是Altera公司推出的一款32位RISC嵌入式处理器&#xff0c;专门设计用于在FPGA上运行。作为软核处理器&#xff0c;Nios II可以通…

Linux/AndroidOS中进程间的通信线程间的同步 - IPC方式简介

前言 从来没有总结过Linux/Android系统中进程间的通信方式和线程间的同步方式&#xff0c;这个专栏就系统总结讨论一下。首先从标题可知&#xff0c;讨论问题的主体是进程和线程、通信和同步&#xff1b;在这里默认你理解进程和线程的区别。通信和同步有什么概念上的区别&…

Windows:注册表配置应用

0、简介 本篇博客记录一下&#xff0c;日常的系统注册表配置选项&#xff0c;以防再次遇到问题不知如何解决。 1、开机启动配置 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run :: 此位置存储了所有用户登录时需要启动的程序。 在该项下新建字符串值&#…

WebXR教学 05 项目3 太空飞船小游戏

准备工作 自动创建 package.json 文件 npm init -y 安装Three.js 3D 图形库&#xff0c;安装现代前端构建工具Vite&#xff08;用于开发/打包&#xff09; npm install three vite 启动 Vite 开发服务器&#xff08;推荐&#xff09;&#xff08;正式项目开发&#xff09; …

达梦统计信息收集情况检查

查询达梦某个对象上是否有统计信息 select id,T_TOTAL,N_SMAPLE,N_DISTINCT,N_NULL,BLEVEL,N_LEAF_PAGES,N_LEAF_USED_PAGES,LAST_GATHERED from sysstats where id IN (select id from sysobjects where upper(name)upper(&objname));可能有系统对象&#xff0c;可以增加…

【matlab】气泡图的应用

【matlab】气泡图的应用 .rtcContent { padding: 30px; } .lineNode {font-size: 12pt; font-family: "Times New Roman", Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-weight: normal; } clear load zb_equi.mat load …

飞帆控件:在编辑模式下额外加载的库

飞帆是一个自由的控件设计平台。在飞帆中&#xff0c;我们可以很方便地创建基于 Vue 2 组件的控件&#xff0c;并使用控件来搭建网页。 他山之石&#xff0c;可以攻玉。在创建控件中&#xff0c;使用 js 、css 依赖库能让我们的控件更强大。 有些时候&#xff0c;在编辑模式下…

Super-Vlan和MUX-Vlan的原理、配置、区别

Super-Vlan 原理 Super-Vlan也叫Aggregate-Vlan。 一般的三层交换机中&#xff0c;通常是采用一个VLAN对应一个vlanif接口的方式实现广播域之间的互通&#xff0c;这在某些情况下导致了IP地址的浪费。因为一个VLAN对应的子网中&#xff0c;子网号、子网定向广播地址、子网缺…

el-table怎么显示 特殊单元格的值

1. 在 el-table-column 上绑定了 formatter 方法 formatEntityName &#xff0c;它会对每一行该列的数据&#xff08; cellValue &#xff09;进行处理。 2. 在 formatEntityName 方法中&#xff0c;尝试对传入的 cellValue 进行 JSON.parse 操作&#xff0c;并根…

2025-04-23 Python深度学习3——Tensor

文章目录 1 张量1.1 数学定义1.2 PyTorch中的张量 2 创建 Tensor2.1 直接创建**torch.tensor()****torch.from_numpy()** 2.2 依据数值创建**torch.zeros() / torch.zeros_like()****torch.ones() / torch.ones_like()****torch.full() / torch.full_like()****torch.arange() …

在统信UOS/麒麟Kylin OS操作系统中配置APT和GIT代理

在统信UOS/麒麟Kylin OS操作系统中配置APT和GIT代理 在内网环境中&#xff0c;直接访问外部资源可能会受到限制&#xff0c;这时候配置APT和GIT的代理就显得尤为重要。本文将详细介绍如何在统信UOS和麒麟Kylin OS操作系统中配置APT和GIT的代理。 为什么需要配置APT和GIT代理&…

第十七讲、Isaaclab中使用操作空间控制器

0 前言 官方教程&#xff1a;https://isaac-sim.github.io/IsaacLab/main/source/tutorials/05_controllers/run_osc.html IsaacsimIsaaclab安装&#xff1a;https://blog.csdn.net/m0_47719040/article/details/146389391?spm1001.2014.3001.5502 有时候&#xff0c;仅使用…

基于SpringBoot的校园二手商品在线交易系统+含项目运行说明文档

基于SpringBoot的校园二手商品在线交易系统含项目运行说明文档 专注校园二手交易平台是一个基于Java的在线市场&#xff0c;专为学生设计&#xff0c;便于买卖二手商品。平台提供全面的用户管理功能&#xff0c;包括学生、管理员和二手商品卖家账户管理。商品管理功能允许用户…

详解springcloud gateway工作原理、断言、filter、uri、id、全局跨域、globalfilter等以及关键源码实现

1.gateway概念 网关就是当前微服务项目的"统一入口"程序中的网关就是当前微服务项目对外界开放的统一入口所有外界的请求都需要先经过网关才能访问到我们的程序提供了统一入口之后,方便对所有请求进行统一的检查和管理 2. 网关的主要功能 将所有请求统一经过网关网…

C++面向对象特性之继承篇

C语音是面向过程的语言&#xff0c;而C在其之上多了面向对象的特性&#xff0c;面向对象三大特性:封装性、继承性、多态性。今天主包来讲讲自己学到的关于C继承特性的知识。 一、继承是什么 继承是提高代码复用的一种重要手段。正如C的模版、泛型编程等等都是为了实现代码复用…

【AI News | 20250423】每日AI进展

AI Repos 1、suna Suna是一款完全开源的AI助手&#xff0c;旨在通过自然对话帮助用户轻松完成现实世界的任务。它作为您的数字伙伴&#xff0c;提供研究、数据分析和日常问题解决等功能&#xff0c;并结合强大的能力与直观的界面&#xff0c;理解您的需求并交付成果。Suna的工…

【学习准备】算法和开发知识大纲

1 缘起 今年&#xff08;2025年&#xff09;的职业升级结果&#xff1a;不通过。没办法升职加薪了。 需要开始完善学习&#xff0c;以应对不同的发展趋势&#xff0c;为了督促自己学习&#xff0c;梳理出相关学习大纲。 分为算法和开发两部分。 算法&#xff0c;包括基础算法和…

第七篇:linux之基本权限、进程管理、系统服务

第七篇&#xff1a;linux之基本权限、进程管理、系统服务 文章目录 第七篇&#xff1a;linux之基本权限、进程管理、系统服务一、基本权限1、什么是权限&#xff1f;2、为什么要有权限&#xff1f;3、权限与用户之间的关系&#xff1f;4、权限对应的数字含义5、使用chmod设定权…

爬虫案例-爬取某企数据

文章目录 1、准备要爬取企业名称数据表2、爬取代码3、查看效果 1、准备要爬取企业名称数据表 企业名称绍兴市袍江王新国家庭农场绍兴市郑杜粮油专业合作社绍兴市越城区兴华家庭农场绍兴市越城区锐意家庭农场绍兴市越城区青甸畈家庭农场绍兴市袍江王新国家庭农场绍兴市袍江月明…