欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Unity实现3D循环滚动效果

程序员文章站 2023-11-17 14:14:34
本文实例为大家分享了unity实现3d循环滚动效果展示的具体代码,供大家参考,具体内容如下 然后通过setdepthandposition这个方法,实现图片的空间空间...

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

Unity实现3D循环滚动效果

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

Unity实现3D循环滚动效果

Unity实现3D循环滚动效果

z轴和y轴,系数是一样的

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

Unity实现3D循环滚动效果

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();
   }   
  }
 }

}

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