第二个刚体使用与第一个相同的脚本,但使用"&球员号码== 1"在if-instances中。
问题是如果第一个刚体跳到另一个上面然后跳起来,第二个就完全无法跳跃。 (反之亦然)
这是一个简单的解决方案吗?
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
//Movement
public float speed;
public float jump;
float moveVelocity;
//Grounded Vars
bool grounded = true;
int playernumber;
void Update ()
{
if (Input.GetKeyDown (KeyCode.Alpha1)) {
playernumber = 1;
}
if (Input.GetKeyDown (KeyCode.Alpha2)) {
playernumber = 2;
}
if (Input.GetKeyDown (KeyCode.Alpha3)) {
playernumber = 3;
}
//Jumping
if ((Input.GetKeyDown (KeyCode.Space) || Input.GetKeyDown (KeyCode.UpArrow) || Input.GetKeyDown (KeyCode.Z) || Input.GetKeyDown (KeyCode.W)) & playernumber == 1 )
{
if(grounded)
{
GetComponent<Rigidbody2D> ().velocity = new Vector2 (GetComponent<Rigidbody2D> ().velocity.x, jump);
}
}
moveVelocity = 0;
//Left Right Movement
if ((Input.GetKey (KeyCode.LeftArrow) || Input.GetKey (KeyCode.A)) & playernumber == 1 )
{
moveVelocity = -speed;
}
if ((Input.GetKey (KeyCode.RightArrow) || Input.GetKey (KeyCode.D)) & playernumber == 1 )
{
moveVelocity = speed;
}
GetComponent<Rigidbody2D> ().velocity = new Vector2 (moveVelocity, GetComponent<Rigidbody2D> ().velocity.y);
}
//Check if on the ground
void OnTriggerEnter2D()
{
grounded = true;
}
void OnTriggerExit2D()
{
grounded = false;
}
}
答案 0 :(得分:0)
这些触发事件在实际事件发生时触发,因此:
当用户跳转时,您可以简单地将接地设置为false,并使用onTriggerEnter将其重置为true并废弃onTriggerExit:
if(grounded){
GetComponent<Rigidbody2D> ().velocity = new Vector2 (GetComponent<Rigidbody2D> ().velocity.x, jump);
grounded = false;
}
编辑:我没有注意到两种触发方法都不匹配代码中的their appropriate signatures,因为它们错过了Collider2D参数。
void OnTriggerEnter2D(Collider2D collider) {
grounded = true;
}