自定义物理问题中的碰撞

时间:2019-03-31 00:31:50

标签: c# unity3d

我是Unity的新手。就像标题一样,我很难在游戏中正确设置碰撞。我正在使用统一的https://unity3d.com/learn/tutorials/topics/2d-game-creation/scripting-gravity?playlist=17093自定义物理脚本。在我的游戏中,我在禁用碰撞方面遇到困难。

例如,当我使用

class StackADT<ANY>(var capacity: Int) {

    private var top = -1
    private val stack:  (generic type array)//NEED TO INITIALIZE PROPERLY HERE 

    fun push(element: ANY) {
        if (top == capacity)
            throw Exception("Overflow occurred in stack!!")
        stack[++top] = element
    }
    ....

它什么都没有改变,两个字符仍然冲突。同样,由于某些原因,触发器的行为也很奇怪,仍然受到碰撞的影响。靠近带有触发器的角色会使他漂浮。我已经坚持了很长时间,非常感谢您的帮助。

值得注意的是,我正在使用自定义物理学,并使用盒对撞机2d来检测攻击范围等。这是其中的一些代码:

Physics2D.IgnoreLayerCollision (8, 9);

并且我在动画中有单独的打孔触发器,以检测角色实际被击中的时间:

Collider2D attackbox = Physics2D.OverlapBox (attackPos.position, new Vector2 (attackRangeX, attackRangeY), 0, whatIsPlayer); 
if (attackbox != null && !isDead && characterController.isDead == false) {
    targetVelocity = Vector2.zero;
    animator.SetTrigger ("isPunching");
    timeBtwAtk = startTimeBtwAtk;
}

当我使用public void SetColliderIndex(int spriteNum) { colliders[currentColliderIndex].enabled = false; currentColliderIndex = spriteNum; colliders[currentColliderIndex].enabled = true; } public void ClearColliderIndex() { colliders[currentColliderIndex].enabled = false; } void OnTriggerEnter2D(Collider2D col) { if (col.tag == "Player") { col.GetComponent<CharacterController2D> ().TakeDamage (enemyDamage); col.GetComponent<CharacterController2D> ().canWait = false; col.GetComponent<CharacterController2D> ().canControl = false; } } 时,我不希望两个指定的层都相互作用。我不希望出现任何怪异的变化,也不希望它们彼此通过时漂浮。同样,当我再次移动玩家的敌人时,我也不希望他能够将他退回。我希望他好像撞墙一样。

2 个答案:

答案 0 :(得分:0)

我已经回答了与此here类似的问题。另外,如果您不希望玩家在碰撞时突然漂浮,则可以将“刚体/刚体2d”类型设置为运动学类型,但这意味着该对象将不受物理影响。您将需要用代码来完成。

答案 1 :(得分:0)

我认为您的问题是在某些时候两个对撞机相互作用和/或两个对撞机被激活,但是从您发布的代码中我无法清楚地确定问题是否存在