【发布时间】: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