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;
}
}
}
效果
可破坏地形
介绍
接下来,我们再设计一种新的地形——可破坏地形,这种机关较为简单,被攻击后会被销毁。那么它的触发方法中即为销毁自己。
代码
/**
* @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;
}
}