【问题标题】:2D Collision & Stop in Unity 3DUnity 3D 中的 2D 碰撞和停止
【发布时间】:2014-06-10 10:59:29
【问题描述】:

我有一个简单的 2D 场景。右边的黄色盒子是“玩家”,而绿色和棕色的东西是“障碍物”。

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

Obstacle 只有一个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 轴移动。我错过了什么?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    IsTrigger

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

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

    更多信息在这里:http://docs.unity3d.com/Manual/CollidersOverview.html

    IsKinematic

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

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

    【讨论】:

    • 我删除了两个对象的isTrigger 和“播放器”的isKinematic。然而,重力开始应用,“玩家”倒下。如何抵消重力?
    • @Raptor 将GravityScale 设置为0 为您的Rigidbody2D
    • @Raptor 您是按照我的建议使用MovePosition,还是像您的问题中显示的那样使用Translate
    • 我错过了您的MovePosition 点。现在完美运行!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2017-07-18
    • 2020-12-31
    相关资源
    最近更新 更多