当前位置: 移动技术网 > IT编程>开发语言>c# > Unity实现3D循环滚动效果

Unity实现3D循环滚动效果

2019年07月18日  | 移动技术网IT编程  | 我要评论

本文实例为大家分享了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();
   }   
  }
 }

}

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网