Unity开发记录-单向平台

单向平台即只检测平台上方的碰撞,不检测平台下方的碰撞。玩家可以通过跳跃跳上平台,在平台可以通过下降按键下降

Unity提供了Platform Effector组件用于创建单向平台

平台组件

  • 平台添加BoxCollider组件和Platform Effector组件

单向平台代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(BoxCollider2D))]
public class OneWayPassController : MonoBehaviour
{
[SerializeField][Header("是否可以下降")]
private bool canDown = true; //设置该平台是否可以下降

[SerializeField]
private float delay = 0.5f; //关闭碰撞检测的时间

private BoxCollider2D platformCollider; //平台的碰撞盒


void Start()
{
platformCollider = gameObject.GetComponent<BoxCollider2D>();
}

void Update()
{

}

/// <summary>
/// 关闭碰撞检测
/// </summary>
public void downToPlatform(BoxCollider2D collider)
{
if(canDown)
StartCoroutine("closeCollider", collider);
}

IEnumerator closeCollider(BoxCollider2D collider)
{
Physics2D.IgnoreCollision(platformCollider, collider, true);
yield return new WaitForSeconds(delay);
Physics2D.IgnoreCollision(platformCollider, collider, false);
}

}

downToPlatform方法接收一个碰撞体collider,通常是角色的碰撞体。角色调用该方法,传入自己的碰撞体,进行下降