欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2D游戏——2021年5月24日

程序员文章站 2024-03-16 17:53:58
...

介绍

在上一篇博文中,我们解决了所有的开关设计。开关设计的初衷,是为了使用开关去触发其他的机关,那么接下来,我们会对其他的机关进行设计。在本片博文中,我们先设计其中的几种地形机关。
地形是2D游戏中必不可少的一个内容,拿马里奥举例,其中有很多很多可以移动的平台,我们的游戏也不例外,也包括了这种比较基本的地形。下面,我们来具体说一说这种可以移动的平台。

可移动平台

设计

可移动平台会循环往复运动,所以它基本的方法就是移动,同时还要有移动的方向和速度。考虑到以后的其他机关可能也有移动的特性,我们先设计了可移动接口,其他也有移动方法的机关可以实现这一接口。

可移动接口

/**
 * @Description: 该类为可移动地形的接口
 * @Author: CuteRed

 *     
*/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public interface Movable
{
    void Movement();
}

标题

根据上述介绍,我们不难得出可移动平台的成员变量——单程时间、方向、速度,为了控制移动时间,还需要引入一个变量用来计时。其方法有2个,分别为移动和更新时间,更新时间方法中,当时间到达单程时间时,移动方向会反转。

/**
 * @Description: MovablePlatform是可移动平台类,可以任意方向循环移动
 * @Author: CuteRed

 *     
*/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MovablePlatform : MonoBehaviour, Movable
{
    public float speed = 1.0f;
    public float oneWayTime = 3.0f;
    private float passTime = 0.0f;

    [Header("移动参数")]
    public Vector3 direction = new Vector3(1, 0, 0);

    private void Update()
    {
        //移动
        Movement();

        //更新时间
        UpdateTime();
    }

    public void Movement()
    {
        transform.position += direction * speed * Time.deltaTime;
    }

    /// <summary>
    /// 更新计时器
    /// </summary>
    private void UpdateTime()
    {
        passTime += Time.deltaTime;
        if (passTime > oneWayTime)
        {
            passTime = 0.0f;
            direction.x = -1 * direction.x;
            direction.y = -1 * direction.y;
        }
    }
}


效果

2D游戏——2021年5月24日

可破坏地形

介绍

接下来,我们再设计一种新的地形——可破坏地形,这种机关较为简单,被攻击后会被销毁。那么它的触发方法中即为销毁自己。

代码

/**
 * @Description: DestructiblePlatform为可破坏的地形,可被攻击破坏
 * @Author: CuteRed

 *     
*/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DestructiblePlatform : Mechanism
{
    private CanBeFoughtMachanism canBefought;
    public override void Trigger(TiggerType triggerType)
    {
        GameObject.Destroy(gameObject);
    }

    protected override bool TriggerDetect()
    {
        return true;
    }
}

效果

2D游戏——2021年5月24日

相关标签: 2D游戏