unity实现翻页效果

作者:weixin_44462815 时间:2022-09-01 17:10:15 

本文实例为大家分享了unity实现翻页效果的具体代码,供大家参考,具体内容如下

一、示意图

unity实现翻页效果

二、步骤

创建物体ToPanel;添加组件ScrollRect,
在下面创建一个空物体用来装需要移动的子物体,

unity实现翻页效果

unity实现翻页效果

创建一个Scrollbar;

unity实现翻页效果

unity实现翻页效果

unity实现翻页效果

unity实现翻页效果

三、代码

下面展示一些 内联代码片。


using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;

public class SliderControl : MonoBehaviour
{
 public Scrollbar m_Scrollbar;
 public ScrollRect m_ScrollRect;
 [Header("子物体的父物体")]
 public GameObject panel;
 [Header("移动到多少百分比图片切换")]  //注释
 [Range(0.1f, 0.9f)] //范围
 public float banfenbi = 0.5f;
 [Header("是否限制一次只能切换一张图片")]  
 public bool limit = false;

private float mTargetValue;
 private bool mNeedMove = false;
 private const float SMOOTH_TIME = 0.2F;
 private float mMoveSpeed = 0f;

private float child_Count;
 private float num1;
 private float var_Down;
 private List<float> num_list1 =new List<float>();
 private List<float> num_list2 = new List<float>();
 private List<float> num_list3 = new List<float>();
 private int weizhi; //页数
 void Start()
 {
   weizhi = 0;
   child_Count = panel.transform.childCount;
   num1 = 1 / (child_Count - 1);
   print("-----子物体数量------  " + child_Count + "   " + num1);
   for (int i = 0; i < child_Count; i++)
   {
     float a = 0;
     num_list1.Add(a + num1 * i);
     float b = (a + num1 * i) + (num1 * banfenbi);
     num_list2.Add(b);
     float c = (a + num1 * i) + (num1 * (1-banfenbi));
     num_list3.Add(c);
     print("---child_Count----- " + num_list1[i] + "  " + num_list2[i]);
   }
 }
 public void OnPointer()
 { }

public void OnPointerDown()
 {
   //print("---OnPointerDown----");
   var_Down = m_Scrollbar.value;
   mNeedMove = false;
 }
 public void OnPointerUp()
 {
   //print("---OnPointerUp----");
   //print("-----m_Scrollbar.value---- " + m_Scrollbar.value);
   for (int i = 0; i < child_Count; i++)
   {
     float num;
     if (var_Down- m_Scrollbar.value<0)
     {
       num = num_list2[i];
     }
     else
     {
       num = num_list3[i];
     }
     if (m_Scrollbar.value <= num)
     {
       if (limit)
       {
         if (i> weizhi)
         {
           weizhi = weizhi + 1;
         }
         else if (i == weizhi)
         {
           weizhi = i;
         }
         else
         {
           weizhi = weizhi - 1;
         }
         mTargetValue = num_list1[weizhi];
       }
       else
       {
         mTargetValue = num_list1[i];
         weizhi = i;  //页数
       }
       break;
     }
   }

mNeedMove = true;
   mMoveSpeed = 0;
 }
 /// <summary>
 /// 直接跳转到指定页数
 /// </summary>
 /// <param name="页数"></param>
 public void OnButtonClick(int value)
 {
   mTargetValue = num_list1[value];
   if (mTargetValue<0)
   {
     mTargetValue = 0;
   }
   if (mTargetValue>1)
   {
     mTargetValue = 1;
   }
   weizhi = value;
   mNeedMove = true;
 }
 void Update()
 {
   if (mNeedMove)
   {
     if (Mathf.Abs(m_Scrollbar.value - mTargetValue) < 0.01f)
     {
       m_Scrollbar.value = mTargetValue;
       mNeedMove = false;
       MoveEnd();
       return;
     }
     m_Scrollbar.value = Mathf.SmoothDamp(m_Scrollbar.value, mTargetValue, ref mMoveSpeed, SMOOTH_TIME);
   }
 }
 /// <summary>
 /// 移动完毕的回调
 /// </summary>
 public void MoveEnd()
 {
   print("----- 移动完毕-----第几页--- "+ (weizhi+1));
 }
}

来源:https://blog.csdn.net/weixin_44462815/article/details/114259792

标签:unity,翻页
0
投稿

猜你喜欢

  • Java基础之数组模拟循环队列

    2022-08-29 12:58:06
  • Java详细讲解不同版本的接口语法和抽象类与接口的区别

    2022-09-30 01:46:38
  • c#代码生成URL地址的示例

    2022-02-17 09:44:08
  • java中JSONObject转换为HashMap(方法+main方法调用实例)

    2023-08-10 04:04:08
  • Mac OS上安装Tomcat服务器的简单步骤

    2022-11-26 21:06:42
  • 一文带你了解C#中抽象方法与虚方法的区别

    2023-07-23 00:14:32
  • Jetpack Compose 的新型架构 MVI使用详解

    2023-01-24 14:53:26
  • Android图文居中显示控件使用方法详解

    2023-04-04 14:07:24
  • Android BottomSheet实现可拉伸控件

    2023-07-05 15:07:51
  • springboot为异步任务规划自定义线程池的实现

    2022-12-05 01:13:02
  • Android编程使用android-support-design实现MD风格对话框功能示例

    2022-05-19 03:46:39
  • 如何通过Android Stduio来编写一个完整的天气预报APP

    2023-10-11 17:45:01
  • SpringBoot自定义MessageConverter与内容协商管理器contentNegotiationManager详解

    2023-11-28 11:35:54
  • SpringBoot集成vue的开发解决方案

    2023-11-24 20:58:10
  • 解析如何在android中增加gsensor驱动(MMA7660)

    2023-05-22 22:03:24
  • 初识Java基础之数据类型与运算符

    2021-10-13 12:20:32
  • Unity 按钮添加OnClick事件操作

    2023-06-28 15:57:27
  • Android开发中线程池源码解析

    2023-12-19 02:30:57
  • 基于jdk动态代理和cglib动态代理实现及区别说明

    2022-04-11 00:32:44
  • RestTemplate自定义请求失败异常处理示例解析

    2021-12-03 22:13:17
  • asp之家 软件编程 m.aspxhome.com