我正在制作游戏,我刚刚开始。我在地图中添加了一个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作为地图,但现在敌人不会与墙壁碰撞并转身,它只是朝着相同的方向但不移动。谁知道为什么?
答案 0 :(得分:0)
你在地板和墙壁上使用相同的对撞机......所以当你碰到墙壁并且已经触及地板时,OnCollisionEnter将不会发生。
所以,你确实得到了碰撞,因此物体不能越过墙壁,但这并不是一次新的碰撞!
解决方案:在地板上使用对撞机,在墙壁上使用不同的对撞机,边缘对撞机对此有好处。