2D碰撞&在Unity 3D中停止

时间:2014-06-10 10:59:29

标签: c# unity3d

我在2D中有一个简单的场景。右边的黄色框是“播放器”,而绿色和&棕色的东西是“障碍”。

播放器附加了BoxCollider2DRigidBody2D和名为Hero.cs的C#脚本。 BoxCollider2D已启用Is Trigger; RigidBody2D已启用Is Kinematics;其他设置保留默认值。

障碍只有BoxCollider2D且启用了Is Trigger

这是Hero.cs

using UnityEngine;
using System.Collections;

public class Hero : MonoBehaviour {
    public float moveSpeed = 0.1f;
    private Vector3 moveDirection;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        Vector3 currentPos = transform.position;
        if(Input.GetKey("left")) {
            transform.Translate(new Vector3(-1, 0, 0));
        } else if(Input.GetKey("right")) {
            transform.Translate(new Vector3(1, 0, 0));
        }
    }

    void OnCollisionEnter2D(Collision2D collision) {
        Debug.Log("Colliding");
    }

    void OnTriggerEnter2D(Collider2D other) {
        Debug.Log("Triggering");

    }
}

控制台日志中仅显示“触发”。

我的问题是:我应该添加什么才能让“障碍”无法访问“播放器”(无需反弹)?

注意:使用Unity 4.5


更新:在我将Gravity Scale设置为 0 后,碰撞检测可以正常工作,但这种做法很奇怪。在碰撞过程中,“玩家”会侧身。观看此YouTube video for action

我希望播放器只沿X或Y轴行进。我错过了什么?

Screenshot

1 个答案:

答案 0 :(得分:2)

IsTrigger

触发器让其他碰撞器通过而不会发生任何碰撞。它们只是触发事件,因此得名。

如果为两个对象禁用IsTrigger,则会发生冲突并触发相应的事件。

此处有更多信息:http://docs.unity3d.com/Manual/CollidersOverview.html

IsKinematic

运动刚体碰撞器只会与其他非运动刚体碰撞器发生碰撞。 看看这个矩阵http://docs.unity3d.com/Manual/CollisionsOverview.html

如果您不想使用强制值移动播放器,请停用IsKinematic并将播放器移至MovePosition