2017-06-15 117 views
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,但现在敌人不会与墙壁碰撞并转身,它只会朝向相同的方向,但不会移动。有人知道为什么

回答

0

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

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

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