URP-UGUI交互功能实现

打印 上一主题 下一主题

主题 1638|帖子 1638|积分 4914

一、非代码层面实现交互(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)
  1. void OnButton()
  2. {
  3.     Debug.Log("111");
  4.     Ghost.GetComponentInChildren<SkinnedMeshRenderer>().sharedMaterial.SetColor("_Color",new Color(Random.value,Random.value,Random.value,1));
  5. }
复制代码

代码:
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEditor.Experimental.GraphView;
  5. using UnityEngine;
  6. using UnityEngine.UI;
  7. public class Rotate : MonoBehaviour
  8. {
  9.     //旋转的速度
  10.     //public float speed;
  11.     //利用滑动条控制速度
  12.     public float Angle;
  13.     private Vector3 direct;
  14.     public enum RotateDirect
  15.     {
  16.         X轴正方向,
  17.         X轴负方向,
  18.         Y轴正方向,
  19.         Y轴负方向,
  20.         Z轴正方向,
  21.         Z轴负方向
  22.     }
  23.     // Start is called before the first frame update
  24.     //声明枚举变量
  25.     public RotateDirect dir;
  26.     void Start()
  27.     {
  28.         
  29.     }
  30.     // Update is called once per frame
  31.     void Update()
  32.     {
  33.         switch(dir)
  34.         {
  35.             case RotateDirect.X轴正方向:
  36.                 direct = Vector3.right; break;
  37.             case RotateDirect.X轴负方向:
  38.                 direct = Vector3.left; break;
  39.             case RotateDirect.Y轴正方向:
  40.                 direct = Vector3.up; break;
  41.             case RotateDirect.Y轴负方向:
  42.                 direct = Vector3.down; break;
  43.             case RotateDirect.Z轴正方向:
  44.                 direct= Vector3.forward; break;
  45.             case RotateDirect.Z轴负方向:
  46.                 direct = Vector3.back; break;
  47.         }
  48.         //自旋转  right代表X轴,up代表Y轴,forward代表Z轴
  49.         //参数分别为旋转轴,旋转的角度,坐标系的选择
  50.         //this.transform.Rotate(Vector3.up,Angle*10*Time.deltaTime,Space.Self);
  51.         //利用滑动条控制速度
  52.         this.transform.Rotate(direct, Angle * Time.deltaTime, Space.Self);
  53.         //第二种,需要四个参数分别是X轴上旋转的角度、Y轴上旋转的角度、Z轴上旋转的角度,模型围绕旋转的坐标系
  54.         //this.transform.Rotate(0, 30 * Time.deltaTime, 0, Space.Self);
  55.     }
  56. }
复制代码
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. public class UIInteractive : MonoBehaviour
  6. {
  7.     public GameObject Ghost;
  8.     public Button button;
  9.     public Toggle toggle;
  10.     public Slider slider;  //滑动条
  11.     void Start()
  12.     {
  13.         //当点击按钮时,触发按钮中onClick方法的监听功能
  14.         button.onClick.AddListener(OnButton);
  15.         toggle.onValueChanged.AddListener(OnToggle);
  16.         slider.onValueChanged.AddListener(Onslider);
  17.     }
  18.     //按钮
  19.     void OnButton()
  20.     {
  21.         Debug.Log("111");
  22.         Ghost.GetComponentInChildren<SkinnedMeshRenderer>().sharedMaterial.SetColor("_Color",new Color(Random.value,Random.value,Random.value,1));
  23.     }
  24.     //开关,利用开关设置对象的显示和隐藏; 其中Toggle函数中需要添加一个布尔值的参数
  25.     void OnToggle(bool ison)
  26.     {
  27.         Ghost.SetActive(ison);
  28.     }
  29.     void Onslider(float value)
  30.     {
  31.         //获取怪物身上的脚本组件中的Speed参数
  32.         Ghost.GetComponent<Rotate>().Angle=slider.value;
  33.     }
  34. }
复制代码
效果展示: 
【太妃糖耶】Up主探索中,欢迎收看求三连!_哔哩哔哩_bilibili

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表