我正在制作我的第一个Unity平台游戏,但我发现我从未阻止过我的玩家无限跳跃。我尝试了使用布尔值的典型解决方案,该布尔值通过跳跃和与地面碰撞来切换。问题是,即使我的播放器确实与地面发生碰撞,OnTriggerEnter2D似乎也没有检测到它。
是的,我已经三遍检查了地面是否有正确的标签。
我尝试使用raycaster解决方案,但这似乎也不起作用。 我有代码打印出与之碰撞的任何物体的标签,因此我知道它根本无法检测到地面。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
//movement variables
public float movex;
public float speed;
public float jumpforce;
//interactivity variables
public Rigidbody2D rb2d;
private bool isJumping;
Vector3 startingPosition;
// Use this for initialization
void Start()
{
rb2d = GetComponent<Rigidbody2D>();
startingPosition = transform.position;
}
// Update is called once per frame
void Update()
{
// localScale;
if (Input.GetKeyDown(KeyCode.Space) && !isJumping)
{
rb2d.velocity = new Vector2(rb2d.velocity.x, jumpforce);
isJumping = true;
}
}
void OnTriggerEnter2D(Collider2D col)
{
Debug.Log(col.tag);
if (col.gameObject.CompareTag("Floor"))
{
isJumping = false
}
}
}
答案 0 :(得分:3)
所以我意识到这是因为地面对撞机没有被设置为触发器。 我添加了第二个对撞机,它是一个触发器,现在可以按预期工作。
答案 1 :(得分:3)
做好自己寻找错误的操作,OP。通常情况下是您的解决方案:)将来您可能会遇到碰撞问题。我发现,当人们遇到无法触发碰撞的问题时,主要问题是:
isTrigger
布尔值(对于OnTriggerEnter(2D))