unity学习:三消基础逻辑及其代码2

MOVE动画

用了Lerp的功能。

public void Move(int destX,int destY,float timeToMove)
    {
        if (!m_isMoving)
        {
            StartCoroutine(MoveRoutine(new Vector3(destX, destY, 0), timeToMove));
        }
    }
IEnumerator MoveRoutine(Vector3 destination, float timeToMove)
    {
        Vector3 startPosition = transform.position;
        bool reachDestination = false;
        float elapsedTime = 0f;
        m_isMoving = true;
        while (!reachDestination)
        {
            if (Vector3.Distance(transform.position, destination) < 0.01)
            {
                reachDestination = true;                
                if (m_board != null)
                {
                    m_board.PlaceGamePiece(this, (int)destination.x, (int)destination.y);
                }
                break;
            }            
            elapsedTime += Time.deltaTime;
            float t = Mathf.Clamp(elapsedTime / timeToMove,0f,1f);            
            switch (interPolation)
            {
                case InterpType.Linear:
                    break;
                case InterpType.EaseOut:
                    t = Mathf.Sin(t * Mathf.PI * 0.5f);
                    break;
                case InterpType.EaseIn:
                    t = 1 - Mathf.Cos(t * Mathf.PI * 0.5f);
                    break;
                case InterpType.SmoothStep:
                    t = t * t * (3 - 2 * t);
                    break;
                case InterpType.SmootherStep:
                    t = t * t * t * (t * (t * 6 - 15) + 10);
                    break;
            }            transform.position = Vector3.Lerp(startPosition, destination, t);            //wait until next 帧
            yield return null;
        }
        m_isMoving = false;
    }

顺势掉落功能

这部分的原理是从三消地图的底部开始一列一列轮询。每一列轮询是从最底部开始往上。如果发现了一个空的,那么就找到在它的直线往上的最近那个宝石,让这个宝石MOVE到这个空的位置上,然后把宝石的位置设置为空。一直连环处理就能实现顺势掉落。

List<GamePiece> CollapseColumn(int column, float collapseTime = 0.1f)
{
    List<GamePiece> movingPiece = new List<GamePiece>();
    for (int i = 0; i < height - 1; i++)
    {
        //如果找到了有某一缺了一个。
        if (m_allGamePieces[column, i] == null)
        {
            
            for (int j = i + 1; j < height; j++)
            {
                if (m_allGamePieces[column, j] != null)
                {
                    //如何实现根据内容越来越快。
                    m_allGamePieces[column, j].Move(column, i, collapseTime*(j-i));
                    m_allGamePieces[column, i] = m_allGamePieces[column, j];
                    m_allGamePieces[column, i].SetCoord(column, i);
                    if (!movingPiece.Contains(m_allGamePieces[column, i]))
                    {
                        movingPiece.Add(m_allGamePieces[column, i]);
                    }
                    m_allGamePieces[column, j] = null;
                    break;
                }
            }
        }
    }
    return movingPiece;
}

以上内容为https://www.udemy.com/course/make-a-puzzle-match-game-in-unity/课程的笔记。
很好的课程!推荐去看。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在五花八门的游戏分类中,益智游戏是不可或缺的一大板块;而在益智游戏这个分类中,消除合成类游戏又是当之无愧的No.1。从考古级别的《俄罗斯方块》到现在风靡全国的《开心消消乐》,消除合成类游戏经久不衰,并且不断地涌现出新的经典作品,带给我们新的启发和乐趣。作为Unity3D的初级开发者,从头到尾独立完成一款简单的2D棋盘消除合成小游戏是你初级实战的最好选择。既能全面而详细的检验你的基础框架能力、C#编程能力、UGUI适配技巧,又可以在此基础上,较为深入的学习协程方法、DoTween插件和消除合成类的核心算法,一举数得。一言以蔽之,消除合成类游戏不难,但要好却并不容易。它琐碎的功能逻辑、层出不穷的延时操作以及复杂的状态控制很容易让人顾此失彼,手忙脚乱,最后的结果往往是,费劲九牛二虎之力把功能实现好了,但代码已经乱成一团糟,定位Bug难、扩展新功能难,甚至自己读起来也难。本课程的最大目的,就是帮初级开发者梳理逻辑出规范而有条理的代码,避免陷入以上尴尬境地。条理捋清楚了,你就会觉得一切似乎变得简单了,很多地方都会顺理成章。本课程没有什么高深的编程技巧,更没有炫酷的视觉效果,只是一步一步教你如何踏踏实实、稳稳当当的完成一款《简单消消乐》。因此,资深大牛你就别进了,想学高深知识的你就别点了,自认为消除小case、分分钟搞定的高手你也趁早走人。在这门课程里,你能够学到的,只有以下几点:1、如何使用UGUI搭建棋盘游戏的基础阵列;2、如何快速的实现通用的三消逻辑;3、如何使用Dotween插件实现物体的位移、缩放、旋转动画;4、如何熟练的使用协程方法完成延时操作逻辑;5、数组、集合、引用类型、Prefab等基础知识的巩固;6、如何出规范而有条理的代码;7、益智小游戏的通用模板。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值