Unity实现3D循环滚动效果

本文实例为大家分享了Unity实现3D循环滚动效果展示的具体代码,供大家参考,具体内容如下

然后通过SetDepthAndPosition这个方法,实现图片的空间空间展开

Z轴和Y轴,系数是一样的

经过上面设置,空间就摆开了

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

public class SelectRole : MonoBehaviour {
 public GameObject rolesObj;
 private int _half = 0;//一侧的卡片数
 private int _movX = 150;//X轴移动距离
 private int _movY = 50;//Y轴移动距离
 private int _movZ = 60;//Z轴移动距离
 private int count = 3;//组件数
 private List<RoleItem> _roleList = new List<RoleItem>();

 // Use this for initialization
 void Start () {
  //加载图片
  Object[] textureList = (Object[])Resources.LoadAll("Pictures");

  int maxDepth = textureList.Length % 2 == 1 ? textureList.Length / 2 + 1 : textureList.Length / 2;//最大深度
  _half = maxDepth;  

  for (int i = 0; i < textureList.Length; i++)
  {
   //加载角色图片预设
   GameObject role = Instantiate(Resources.Load("Role", typeof(GameObject))) as GameObject;
   role.transform.parent = rolesObj.transform;
   role.transform.localScale = Vector3.one;

   EventDelegate.Add(role.GetComponent<UIToggle>().onChange , RoleToggleChange);

   RoleItem item = role.GetComponent<RoleItem>();
   item.texture.mainTexture = textureList[i] as Texture;

   //设置角色卡片排序命名
   role.name = maxDepth.ToString();
   if (i > 0)
   {
    //奇数设置为右边,下标为正数
    if (i % 2 == 1)
    {
     maxDepth--;
     role.name = maxDepth.ToString();
    }
    //偶数设置为左边,下标为负数
    else
    {
     role.name = "-" + maxDepth.ToString();
    }
   }

   SetDepthAndPosition(item,0,0);
   _roleList.Add(item);
  }
 }

 private void SetDepthAndPosition(RoleItem role,int dir,int index)
 {
  int indexDepth = 0;
  //左右移动后,重新排序命名
  if (dir != 0)
  {
   if (index*dir > _half )
    indexDepth = -dir * (_half - 1);
   else
    indexDepth = index > -1 && index < 1 ? dir : index;
   role.name = indexDepth.ToString();
  }
  else
  {
   indexDepth = int.Parse(role.name);
  }

  TweenPosition tp = role.GetComponent<TweenPosition>();
  int x = indexDepth < 0 ? -(_half + indexDepth) * _movX : (_half - indexDepth) * _movX;
  indexDepth = System.Math.Abs(indexDepth);
  tp.to = new Vector3(x, (_half - indexDepth) * _movY, (_half - indexDepth) * _movZ);

  role.bg.depth = count * indexDepth;
  role.active.depth = 1 + count * indexDepth;
  role.texture.depth = 2 + count * indexDepth;  

  role.GetComponent<UIToggle>().value = indexDepth == _half ? true:false;
  tp.PlayForward();
 }

 /// <summary>
 /// 左边
 /// </summary>
 public void LeftClick()
 {
  //重新排列顺序
  foreach (RoleItem role in _roleList)
  {
   int index = int.Parse(role.name);
   print(index);
   SetDepthAndPosition(role,1,++index);
  }
 }

 /// <summary>
 /// 右边
 /// </summary>
 public void RightClick()
 {
  //重新排列顺序
  foreach (RoleItem role in _roleList)
  {
   int index = int.Parse(role.name);
   SetDepthAndPosition(role,-1,--index);
  }
 }

 /// <summary>
 /// 鼠标选中某个角色
 /// </summary>
 public void RoleToggleChange()
 {
  if(UIToggle.current.value)
  {
   int index = int.Parse(UIToggle.current.name);
   int moveCount = _half - System.Math.Abs(index);//移动个数
   for (int i = 0; i < moveCount;i++ )
   {
    if (index > 0)
     LeftClick();
    else
     RightClick();
   }
  }
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity实现轮盘方式的按钮滚动效果

    近期在项目中,策划给出了一个需求就是,让按钮按照一个轮盘的轨迹进行滑动的效果,经过一番测试,实现了初步的效果. 我这里区分了横向滑动和纵向滑动,这里以纵向滑动为例子进行示范,实现按钮的滑动效果. 首先就是先进行位置初始化: /// <summary> ///从大到小排序,Y轴 /// </summary> private Comparison<CircleScrollRectItemBase> ComparisionY = delegate (CircleScrollR

  • UGUI实现ScrollView无限滚动效果

    抽空做了一个UGUI的无限滚动的效果.只做了一半(向下无限滚动).网上也看了很多教程,感觉还是按照自己的思路来写可能比较好.搭建如下: content节点不添加任何组件.布局组件默认是会重新排版子节点的,所以如果子节点的位置变化,会重新排版,不能达到效果.Size Fitter组件也不加,自己写代码调整Size大小(不调整大小,无法滑动). 最主要的实现过程就是用Queue来搬运Cell.在向下滚动的过程中(鼠标上滑),顶部滑出View Port的Cell被搬运到底部续上.这点类似于Queue的

  • Unity实现游戏卡牌滚动效果

    最近项目中的活动面板要做来回滚动卡牌预览效果,感觉自己来写的话,也能写,但是可能会比较耗时,看到Github上有开源的项目,于是就借用了,Github的资源地址,感谢作者的分享. 本篇博客旨在告诉大家如何利用这个插件. 插件的核心在于工程中的6个脚本,以下是六个脚本的源码: DragEnhanceView.cs using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSys

  • Unity实现3D循环滚动效果

    本文实例为大家分享了Unity实现3D循环滚动效果展示的具体代码,供大家参考,具体内容如下 然后通过SetDepthAndPosition这个方法,实现图片的空间空间展开 Z轴和Y轴,系数是一样的 经过上面设置,空间就摆开了 using UnityEngine; using System.Collections; using System.Collections.Generic; public class SelectRole : MonoBehaviour { public GameObjec

  • Unity实现卡片循环滚动效果的示例详解

    目录 简介 定义卡片的摆放规则 调整卡片的层级关系 调整卡片的尺寸大小 动态调整位置.层级和大小 移动动画 按钮事件 简介 功能需求如图所示,点击下一个按钮,所有卡片向右滚动,其中最后一张需要变更为最前面的一张,点击上一个按钮,所有卡片向左滚动,最前面的一张需要变更为最后一张,实现循环滚动效果. 最中间的一张表示当前选中项,变更为选中项的滚动过程中,需要逐渐放大到指定值,相反则需要恢复到默认大小. 实现思路: 定义卡片的摆放规则: 调整卡片的层级关系: 调整卡片的尺寸大小: 卡片向指定方向移动,

  • vue实现3D切换滚动效果

    本文实例为大家分享了vue实现3D切换滚动效果的具体代码,供大家参考,具体内容如下 今天写项目,遇到一个点击切换的滚动需求,贴出来,做一个记录 这个是最终的一个效果,点击左右小箭头,实现滚动效果,但是只是简单滚动,没有动画之类的 实现思路: css中,正常写一个div用display:flex来平铺图片 然后中间位置定位一个框,框大小比外面的大,中间图片随意取列表中的一个就行 js中,使用v-for循环列表 点击右侧时,将循环列表中的第一个图片删除,然后添加到列表最后一个,点击左侧时同理,这样,

  • 分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML xmlns="http://www.w3.org/1999/xhtml"> <HEAD> <TITLE>分别用marquee

  • 不间断循环滚动效果的实例代码(必看篇)

    蛮优秀的一段效果代码,可以上下左右滚动,收藏了 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&q

  • JS实用的带停顿的逐行文本循环滚动效果实例

    如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>JS实用的带停顿的逐行文本循环

  • JavaScript代码实现图片循环滚动效果

    1.概述 循环滚动图片,不仅可以增添Web页面的动态效果,而且可以节省页面空间,有效地保证在有限的页面中显示更多的图片. 2.技术要点 主要应用setTimeout()方法实现图片的循环滚动效果.setTimeout()方法的语法格式如下: setTimeout(function,milliseconds,[arguments]) 参数说明: a. function:要调用的JavaScript自定义函数名称. b. Milliseconds:设置超时时间(以毫秒为单位). 功能:经过超时时间后

  • iOS模拟中奖名单循环滚动效果

    本文实例为大家分享了iOS模拟中奖名单循环滚动效果的具体代码,供大家参考,具体内容如下 1.动态效果图: 2.思路: (1)控件:一个父View,依次添加两个tableVew,使其上下紧挨着,高度均等于所有cell的总高度,且加载相同的的数据,父视图的clipsToBounds属性一定要设置为true (2)滚动:使用计时器,调整时间及滚动大小,使展示平滑 (3)循环算法:当A列表滚动出界面时,就把它添加在B列表的下面,B列表滚动出界面时,就把它添加在A列表的下面,形成循环效果 3.Swift版

  • JS实现的文字间歇循环滚动效果完整示例

    本文实例讲述了JS实现的文字间歇循环滚动效果.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>www.jb51.net - 间歇循环滚动</title> <style> #box{ height:240px; width:300px; margin:0 auto

  • Android使用Recyclerview实现图片水平自动循环滚动效果

    简介: 本篇博客主要介绍的是如何使用RecyclerView实现图片水平方向自动循环(跑马灯效果) 效果图:  思路: 1.准备m张图片 1.使用Recyclerview实现,返回无数个(实际Interge.MAXVALUE)item,第n个item显示第n%m张图片 3.使用recyclerview.scrollBy  每个一段时间水平滚动一段距离 4.通过layoutManager.findFirstVisibleItemPosition()获取当前显示的第一个View是第几个item,上面

随机推荐