- 最后登录
- 2022-10-8
- 注册时间
- 2010-12-6
- 阅读权限
- 100
- 积分
- 14150
- 纳金币
- 76544
- 精华
- 23
|
在unity3d相关论坛上看到一个帖子,楼主贴出了自己写的一些有用的代码片段,并号召大家也跟着贴出自己的。
通过这么一个帖子,能够学到很多东西,有感于此,不才也想号召纳金网圈子里的朋友,把自己觉得不错的或是自己写的,或是淘来的代码片段贴出来,大家一起讨论,共同进步。
一小段代码,单独发个帖子,可能不起眼,但如果我们能够集合到一起,那其价值将不可小视。
大家如果乐意,请同时写清楚代码的功能和用法,代码中最好能够有比较清楚的注释。
好吧,从我开始下边是利用unity原生GUI做的一个卡片滑动功能。
分享如下,附件有TXT~~~~~~~~~~~~~~~~~
void Update () {
//*********划屏操作**********//
if (beTouched == 0)
{
if (Input.touchCount > 0)
{
Vector2 deltaPos = Input.GetTouch(0).deltaPosition;
//取得触摸移动量
float X = deltaPos.x;
float Y = deltaPos.y;
//如果检测到触摸滑动
if (deltaPos != Vector2.zero)
{
//横向滑动
if (Mathf.Abs(X) > Mathf.Abs(Y))
{
//向左滑动
if (X > 30)
{
//以下为逻辑响应部分,由于OnGui中不断刷新,但一些逻辑改变只需响应一次,因此放在此处。
if (currentCardId > minCardId && Control_Game.CurrentGameState == Control_Game.GameState.GAME_RUNNING)
{
Control_Game.currentCardId = currentCardId - 1;
beTouched = Common.SELECT_LEFT;
}
}
//向右滑动
if (X < -30)
{
//以下为逻辑响应部分,由于OnGui中不断刷新,但一些逻辑改变只需响应一次,因此放在此处。
if (currentCardId < maxCardId && Control_Game.CurrentGameState == Control_Game.GameState.GAME_RUNNING)
{
Control_Game.currentCardId = currentCardId + 1;
beTouched = Common.SELECT_RIGHT;
}
}
}
//纵向滑动
else if (Mathf.Abs(Y) > Mathf.Abs(X))
{
if (Y > 30)
{
//以下为逻辑响应部分,由于OnGui中不断刷新,但一些逻辑改变只需响应一次,因此放在此处。
if (currentScreenId < (maxCardId - minCardId) / noPerScreen && Control_Game.CurrentGameState == Control_Game.GameState.GAME_ITEMLIST)
{
currentScreenId = currentScreenId + 1;
beTouched = Common.SELECT_DOWN;
}
}
if (Y < -30)
{
//以下为逻辑响应部分,由于OnGUI中不断刷新,但一些逻辑改变只需响应一次,因此放在此处。
if (currentScreenId > 0 && Control_Game.CurrentGameState == Control_Game.GameState.GAME_ITEMLIST)
{
currentScreenId = currentScreenId - 1;
beTouched = Common.SELECT_UP;
}
}
}
}
}
}
//*********卡片左右移动响应*******************//
if (Control_Game.CurrentGameState == Control_Game.GameState.GAME_RUNNING)
{
if (beTouched > 0)
{
float rectLeft = 0;
float rectScrollLeft = 0;
leftOffset = Mathf.MoveTowards(leftOffset, wantedLeftOffset, scrollSpeed * Time.deltaTime);
//向左移
if (beTouched == Common .SELECT_RIGHT)
{
rectLeft = baseWidth - leftOffset;
rectScrollLeft = rectLeft - wantedLeftOffset;
SetLeftRightRect(rectLeft, rectScrollLeft);
}
//向右移
if (beTouched == Common .SELECT_LEFT)
{
rectLeft = leftOffset - contentBGWidth;
rectScrollLeft = rectLeft + wantedLeftOffset;
SetLeftRightRect(rectLeft, rectScrollLeft);
}
if (Mathf.Abs(wantedLeftOffset - leftOffset) < 1)
{
rectLeft = wantedLeftOffset - contentBGWidth;
rectScrollLeft = 1500;
SetLeftRightRect(rectLeft, rectScrollLeft);
beTouched = 0;
leftOffset = 0;
}
}
}
}
}
————————————————————————
//设定左右移动的内容位置
private void SetLeftRightRect(float rectleft, float rectscrollleft)
{
contentBGRect = Tools.getScaleRect(rectleft, Common.funBtnSpace * 8, contentBGWidth, contentBGHeight);
contentScrollRect = Tools.getScaleRect(rectscrollleft, Common.funBtnSpace * 8, contentBGWidth, contentBGHeight);
}
——————————————————————————
以下代码在OnGUI中被调用。
private void DrawCard()
{
if (beTouched == Common .SELECT_LEFT)
{
//开始绘制组,将要显示的内容 ,该方法中是用GUI绘制GUIGroup,然后在GUIGroup中包含要绘制的主要内容,上面代码中改变的Rect是GUIGroup的Rect。
DrawCard(0, ***e,contentBGRect);
//开始绘制组,将要消失的内容
DrawCard(1, ***e,contentScrollRect);
}
else if (beTouched == Common .SELECT_RIGHT)
{
//开始绘制组,将要显示的内容
DrawCard(0, ***e,contentBGRect);
//开始绘制组,将要消失的内容
DrawCard(-1, ***e, contentScrollRect);
}
else
{
DrawCard(0,false, contentBGRect);
}
}
|
|