unity3D学习【功能实现】之十:关卡制作scroll rect应用以及一些代码

    xiaoxiao2025-10-17  3

    这个是效果图,点击查看 要用到前一章的even trigger。不了解的稍微看下。整个就一个topPanelScr.cs代码文件挂在topPanel下,后面会给出,先写到这里,晚上有空在写。 看工程目录图是最好的 那么主要思路是,在MainPanel下面  建立了topPanel和bottomPanel(这个可以先不用管,就是12345这5个按钮而已),还有Buttonright和Buttonleft这两个左右点击的按钮都是次要的。主要的在topPanel里。  、 给topPanel添加scrollrect组件,这个区域就变成一个可以滑的区域的了,但是没东西可以滑,所以在topPanel的下面在建立一个Panel,这个面板的实际大小就比较大了,我的是2000*300,我在它的下面放了5张关卡背景图片。 在回到topPanel--scroll rect组件的Content把Panel拖进  然后horizontal或者vertical打勾就可以横向或者竖向用鼠标滑动了,我这里是全部勾去掉的,因为我到时候是用代码控制的 随便在什么地方UI--Scrollbar,在我的Hierarchy面板里是灰色的,因为是用代码控制,实际用不到就隐藏了。 然后还是回到topPanel--scroll rect的 horizontal scrollbar把这个Scrollbar拖进去,这样这个Scrollbar和topPanel建立了联系,运行下,拖动Scrollbar可以控制Panel的面板划来划去。   代码部分: 最主要的是当用鼠标(或者手滑触摸屏)向右或者左滑一个,关卡也就是这个Panel滑动的切换一张Image。 topPanel下建立topPanelScr.cs脚本,在添加Event Trigger组件,用来响应鼠标按下和鼠标抬起。 public Scrollbar m_Scrollbar;//这个要拖进来       //publicScrollRect m_ScrollRect;       privatefloat mTargetValue=0;       private boolmNeedMove = false; public Vector2 offSet;       public voidOnPointerDown()       {             offSet.x=Camera.main.ScreenToWorldPoint(Input.mousePosition).x;       } public void OnPointerUp()       {             offSet.x =Camera.main.ScreenToWorldPoint(Input.mousePosition).x -offSet.x;             if(Mathf.Abs (offSet.x) > 70) { //这个70看实际情况确定滑多少距离合适                             if (offSet.x> 0) {                         OnButtonleft();                   }else{                         OnButtonRight();                   }             } else{                   return;             }             mNeedMove =true;             } public void OnButtonRight(){             if(m_Scrollbar.value <0.25f){//是按百分比计算的                   mTargetValue= 0.25f;//相信我用if写比较不容易出错,                                                                                               //也有的可以这样写mTargetValue =mTargetValue +0.25f每次点击右键             }elseif(m_Scrollbar.value <0.5f){                   mTargetValue= 0.5f;             }elseif(m_Scrollbar.value <0.75f){                   mTargetValue= 0.75f;             }elseif(m_Scrollbar.value <1){                   mTargetValue= 1;             }                         mNeedMove =true;             //mMoveSpeed= 0;       }       public voidOnButtonleft(){             if(m_Scrollbar.value >0.75f){                   mTargetValue= 0.75f;             }elseif(m_Scrollbar.value >0.5f){                   mTargetValue= 0.5f;             }elseif(m_Scrollbar.value >0.25f){                   mTargetValue= 0.25f;             }elseif(m_Scrollbar.value >0){                   mTargetValue= 0;             }                   mNeedMove =true;                   //mMoveSpeed= 0;                         }       voidUpdate()       {             if(mNeedMove)             {                   if(Mathf.Abs(m_Scrollbar.value - mTargetValue) < 0.02f)                   {                         m_Scrollbar.value = mTargetValue;                         mNeedMove =false;                         return;                   }                   //m_Scrollbar.value = Mathf.SmoothDamp(m_Scrollbar.value,mTargetValue, ref mMoveSpeed,SMOOTH_TIME);//两种移动的方式,我还是喜欢MoveTowards                   m_Scrollbar.value=Mathf.MoveTowards(m_Scrollbar.value,mTargetValue,0.8f*Time.deltaTime);             }       } //结束,大致是这样的,完整代码如下 using UnityEngine; using System.Collections; using UnityEngine.UI; public class topPanelScr : MonoBehaviour {       publicScrollbar m_Scrollbar;       publicScrollRect m_ScrollRect;       privatefloat mTargetValue=0;       private boolmNeedMove = false;       //privateconst float MOVE_SPEED = 1F;       //privateconst float SMOOTH_TIME = 0.2F;       //privatefloat mMoveSpeed = 0f;       publicVector2 offSet;       voidStart(){             m_Scrollbar.value = 0;       }       public voidOnPointerDown()       {             offSet.x=Camera.main.ScreenToWorldPoint(Input.mousePosition).x;       }       public voidOnPointerUp()       {             offSet.x =Camera.main.ScreenToWorldPoint(Input.mousePosition).x -offSet.x;             if(Mathf.Abs (offSet.x) > 70) {                   //mTargetValue = (int)m_Scrollbar.value;                   if (offSet.x> 0) {                         OnButtonleft();                   }else{                         OnButtonRight();                   }             } else{                   return;             }             mNeedMove =true;             //mMoveSpeed= 0;       }       public voidOnButtonClick(int value)       {             switch(value)             {             case1:                   mTargetValue= 0;                   break;             case2:                   mTargetValue= 0.25f;                   break;             case3:                   mTargetValue= 0.5f;                   break;             case4:                   mTargetValue= 0.75f;                   break;             case5:                   mTargetValue= 1f;                   break;             default:                   Debug.LogError("!!!!!");                   break;             }             mNeedMove =true;       }       public voidOnButtonRight(){             if(m_Scrollbar.value <0.25f){                   mTargetValue= 0.25f;             }elseif(m_Scrollbar.value <0.5f){                   mTargetValue= 0.5f;             }elseif(m_Scrollbar.value <0.75f){                   mTargetValue= 0.75f;             }elseif(m_Scrollbar.value <1){                   mTargetValue= 1;             }                         mNeedMove =true;             //mMoveSpeed= 0;       }       public voidOnButtonleft(){             if(m_Scrollbar.value >0.75f){                   mTargetValue= 0.75f;             }elseif(m_Scrollbar.value >0.5f){                   mTargetValue= 0.5f;             }elseif(m_Scrollbar.value >0.25f){                   mTargetValue= 0.25f;             }elseif(m_Scrollbar.value >0){                   mTargetValue= 0;             }                   mNeedMove =true;                   //mMoveSpeed= 0;                         }       voidUpdate()       {             if(mNeedMove)             {                   if(Mathf.Abs(m_Scrollbar.value - mTargetValue) < 0.02f)                   {                         m_Scrollbar.value = mTargetValue;                         mNeedMove =false;                         return;                   }                   //m_Scrollbar.value = Mathf.SmoothDamp(m_Scrollbar.value,mTargetValue, ref mMoveSpeed, SMOOTH_TIME);                   m_Scrollbar.value=Mathf.MoveTowards(m_Scrollbar.value,mTargetValue,0.8f*Time.deltaTime);             }       } }
    转载请注明原文地址: https://ju.6miu.com/read-1303234.html
    最新回复(0)