统一的2D光线投射不起作用

时间:2018-03-04 22:28:10

标签: unity3d unity5 game-physics raycasting

所以这是我一直在研究的代码:

using System.Collections.Generic;
using UnityEngine;

public class MovePlayer : MonoBehaviour
{
    public float sidewaysForce;
    public float jumpingForce;

    public Rigidbody2D playerRigidbody;
    public Transform playerTransform;

    private Vector2 forceToAdd;
    private bool onGround;

    private LayerMask mask = 8;

    private void Start()
    {
        forceToAdd = new Vector2(0, 0);
    }

    void FixedUpdate()
    {
        // Basic left/right movement

        forceToAdd.x = 0;
        forceToAdd.y = 0;

        if (Input.GetKey(KeyCode.A))
        {
            forceToAdd.x = -sidewaysForce;
        }
        else if (Input.GetKey(KeyCode.D))
        {
            forceToAdd.x = sidewaysForce;
        }

        if (Input.GetKey(KeyCode.Space) && onGround == true)
        {
            forceToAdd.y = jumpingForce;
            onGround = false;
        }

        var something = Physics2D.Raycast(playerTransform.position, Vector2.down, 200000f, mask.value);

        Debug.Log(something.collider);

        playerRigidbody.AddForce(forceToAdd, ForceMode2D.Impulse);
    }
}

我的问题是:无论我向上移动玩家多远,无论是(0,5)还是(0,2044),它仍会打印出“击中地面”。

我已经尝试过Physics和Physics2D,我已经尝试过LayerMasking,但是它不会起作用。我是Unity btw的初学者。

编辑:我打印Physics2D.Raycast(playerTransform.position, Vector3.down, 2f).collider我结束了“播放器”,而不是“地面”,任何方法来解决这个问题?我尝试将距离增加到20和2000,但它仍然产生“玩家”。有什么想法吗?

编辑#2:我也尝试了LayerMasks,但仍无法正常工作。

1 个答案:

答案 0 :(得分:1)

问题是你正在解析Physics2D.Raycast错误的参数。正如您在Unity文档中看到的那样,该函数采用Vector2而不是Vector3。

https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html

另外,在Unity中测试Raycast时,请始终将distance参数设置为Mathf.Infinity,直到完全设计完解决方案为止。这样可以省去调试中的麻烦。最佳做法是添加注释,说明它是一个临时距离值,并且应该稍后更改。

将来在论坛上发布您的问题时,请确保正确解释您的问题,因为我必须仔细查看您的代码才能找到目的。

我将不会评论你的代码设计,因为这是堆栈溢出而不是reddit,但是我在大学教授编程,如果你愿意接受,我很乐意提供帮助:)