这个是效果图,点击查看
要用到前一章的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