【问题标题】:2D raycasting in unity doesn't work统一的 2D 光线投射不起作用
【发布时间】:2018-03-04 22:28:09
【问题描述】:

这是我一直在处理的代码:

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),它仍然会打印出“Hit ground”。

我已经尝试过 Physics 和 Physics2D,我已经尝试过 LayerMasking,所有方法,但它都不起作用。顺便说一句,我是 Unity 的初学者。

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

编辑#2:我也试过 LayerMasks,还是不行。

【问题讨论】:

  • 尝试将其保存在变量中并打印与之交互的内容
  • Chik3k3r,看我的编辑
  • 哪一层蒙版?另外,您是否尝试过使用起始位置的偏移量(例如:Physics2D.Raycast(playerTransform.position + Vector3.down, Vector3.down, 2f)?

标签: unity3d unity5 game-physics raycasting


【解决方案1】:

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

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

对于在 Unity 中测试 Raycast,始终将距离参数设置为 Mathf.Infinity,直到您完全设计解决方案。这将使您在调试时免于头疼。最佳做法也是添加注释,说明它是一个临时距离值,以后应该更改。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多