我目前正在尝试使用raycast让我的游戏知道我的角色何时在空中,或者更重要的是当他在地面时。一个简单的光线投射应该可以做到这一点,但无论我尝试什么,它都会返回假。我的玩家和地板都附有碰撞器,这是相关的代码。
var leftKey: KeyCode;
var rightKey: KeyCode;
var jumpKey: KeyCode;
var playerSpeed = 7;
var onFloor = false;
var distToGround: float;
function Start () {
// get the distance to ground
distToGround = GetComponent.<Collider2D>().bounds.extents.y + 0.1f;
}
function IsGrounded(): boolean {
return Physics.Raycast(GetComponent.<Collider2D>().bounds.center, Vector3.down, distToGround, 1 << 8);
}
function Update () {
Debug.Log("" + IsGrounded());
if (IsGrounded()){
if(Input.GetKey(leftKey)){
GetComponent.<Rigidbody2D>().velocity.x = playerSpeed * -1;
} else if(Input.GetKey(rightKey)){
GetComponent.<Rigidbody2D>().velocity.x = playerSpeed;
}
if(Input.GetKeyDown(jumpKey)){
GetComponent.<Rigidbody2D>().AddForce(new Vector2(0,380));
}
} else if (!IsGrounded()) {
if(Input.GetKey(leftKey)){
GetComponent.<Rigidbody2D>().AddForce(new Vector2(-2,0));
} else if(Input.GetKey(rightKey)){
GetComponent.<Rigidbody2D>().AddForce(new Vector2(2,0));
}
}
}
我已经坚持了一段时间了,我很确定我只是一个缺少简单的东西或者我一直在阅读过时材料的白痴。
答案 0 :(得分:0)
两件事:
您的IsGrounded()
函数有拼写错误。它应该是GetComponent<Collider2D>()
,而不是GetComponent.<Collider2D>()
尝试增加distToGround
浮点数的值,以防万一RayCast朝着正确的方向前进,但距离不够远。
我希望有所帮助!