0

我正在开发一款游戏,而我刚刚开始。我在地图中添加了一个 png,并且一直在我想要无法通过的区域周围添加对撞机(它是一个 2D 平台游戏)。我已经设计了一个敌人,并在它四处移动时添加了一个 2DRigidBody 组件,并开始使用 2DBoxColliders 作为关卡的碰撞器,以及我编写的脚本:

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

public class Sexapus : MonoBehaviour {

public static int Velocity = 42;
public Rigidbody2D rb;
public Vector2 dir;
public Animator anim;

void Start () {
    rb = GetComponent<Rigidbody2D>();
    dir = new Vector2(1, 0);
    anim = GetComponent<Animator>();
}

// Update is called once per frame
void Update () {
    rb.velocity = dir * Velocity;
    anim.SetFloat ("Direction", dir.x);
}

void OnCollisionEnter2D (Collision2D col) {
    dir = dir * -1;
}

//CHECK TASKS
}

意味着敌人会撞到墙的一侧,然后旋转并开始向另一条路走。我意识到我的地图的大小使用多个 2DBoxColliders(当我说多个时,我的意思是我可能不得不使用超过一百个)是一种非常糟糕的方法。我现在也开始在地图上使用 2DpolygonCollider,但现在敌人不会与墙壁的侧面发生碰撞并转身,它只是保持朝向同一个方向但不会移动。有谁知道为什么?

4

1 回答 1

0

您对地板和墙壁使用相同的对撞机...因此,当您与墙壁发生碰撞并且已经接触到地板时, OnCollisionEnter 将不会发生。

所以,你确实遇到了碰撞,因此物体不能越过墙壁,但这不是新的碰撞!

解决方案:在地板上使用对撞机,在墙壁上使用不同的对撞机,边缘对撞机对此很有用。

于 2017-06-20T16:41:01.427 回答