unity2d 通过触发器来判断瓦片地图那个区域玩家不能走

文章介绍了在Unity3D中通过在玩家周围添加带有碰撞器和触发器的子对象,来判断玩家能否在特定位置移动的方法。当触发器被触发时,更新一个结构体中的变量以标志移动方向的可行性。在移动脚本中,利用这个结构体来决定玩家的移动行为。
摘要由CSDN通过智能技术生成

 我的思路是在玩家周围添加子对象通过子物体上的触发器来判断该位置能否移动。这里就不多就不讲移动方法如何写。

可以按下面步骤进行操做:

首先瓦片地图要挂载上复合碰撞器和瓦片地图碰撞器(并且在制动添加的rigibody2d上的重力设置为0)

还有一点触发器的发生必须两个物体其中一个带有刚体并且碰撞双方都带有碰撞器

图1.1

 

挂载到玩家上的周围的子对象都要有碰撞器并且把is trigger可触发勾选上,这里一共有4个, 如图1.2

图1.2

 调整好四个对象位置后大概是这样,这里碰撞器的大小要自己调整我的是0.9如果不调的话碰撞会提前发生。如图1.3

图1.3

 弄好这些配置开始写挂载到这四个对象上的脚本,通过进入触发器触发函数出触发器触发函数来对结构体中的判断方向是否能移动的变量进行修改。如图下面带码

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

public struct Panf
{
    public bool up;
    public bool down;
    public bool right;
    public bool left;
} 

public class PanPlayerMove : MonoBehaviour
{
    private GameObject gb;//当前对象

    public static Panf p = new Panf();

    private void Start()
    {
        gb = this.gameObject;

        initialize();//结构体初始化
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        //判读是那个对象触发的
        Debug.Log("进入已经被触发");
        if (gb.name == "tile_00888 (0)")
        {
            p.up = false;
        }
        else if (gb.name == "tile_00888 (1)")
        {
            p.down = false;
        }
        else if (gb.name == "tile_00888 (2)")
        {
            p.right = false;
        }
        else if (gb.name == "tile_00888 (3)")
        {
            p.left = false;
        }
    }

    private void OnTriggerExit2D(Collider2D collision)
    {
        Debug.Log("离开已经被触发");
        if (gb.name == "tile_00888 (0)")
        {
            p.up = true;
        }
        else if (gb.name == "tile_00888 (1)")
        {
            p.down = true;
        }
        else if (gb.name == "tile_00888 (2)")
        {
            p.right = true;
        }
        else if (gb.name == "tile_00888 (3)")
        {
            p.left = true;
        }
    }

    void initialize()
    {
        p.up = true;
        p.down = true ;
        p.left = true ;
        p.right = true ;
    }
}

然后在移动脚本判断上加一个该位置能否移动的的判断就行了,其中p就是结构体实例化对象。如图1.4

图1.4

 如有对本内容不懂可以向我提问。在我看到后会进行回答的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值