查看: 1280|回复: 0
打印 上一主题 下一主题

[项目资源]有用的代码片段

[复制链接]

5472

主题

6

听众

1万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
76544
精华
23

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

跳转到指定楼层
楼主
发表于 2012-9-7 10:20:20 |只看该作者 |倒序浏览
    在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);

}

}









代码.txt

0 Bytes, 下载次数: 0

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-12-1 04:04 , Processed in 0.093958 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部