嘿伙计们正在制作2D平台游戏并陷入困境。到目前为止,我已经有了长方形的景观,让玩家可以跳跃并继续前行。现在我想开始添加一些山丘。画一个三角形,左侧代表一个玩家可以走上去的小山。我已经制作了景观以及从我的其他路径复制Box Collider 2D。我想出了一种旋转对撞机的方法,使其以45度角向上升,就像三角形的斜率一样。出于某种原因,虽然当我走进三角形时,玩家并没有开始走上它。我必须跳到山上,他看起来像一个看不见的长方形!我制作了厚度为.25的对撞机,所以我知道我需要整个对撞机。知道为什么吗?我真的没有任何代码,因为我所做的一切几乎都在场景视图中。谢谢大家!
这是播放模式中的玩家,以某种力量站在山顶:
以下是场景视图中对撞机的样子。我已经把对撞机全部移动了,它仍然做同样的事情:
这是我的动作代码:
public class Player : MonoBehaviour {
public float maxSpeed = 3;
public float speed = 50f;
public float jumpPower = 150f;
public bool grounded;
private Rigidbody2D rb2d;
private Animator anim;
void Start () {
rb2d = gameObject.GetComponent<Rigidbody2D>();
anim = gameObject.GetComponent<Animator>();
}
void Update () {
anim.SetBool("Grounded",grounded);
anim.SetFloat("Speed", Mathf.Abs(rb2d.velocity.x));
if (Input.GetAxis("Horizontal") < -0.1)
{
transform.localScale = new Vector3(-1, 1, 1);
}
if (Input.GetAxis("Horizontal") > 0.1)
{
transform.localScale = new Vector3(1, 1, 1);
}
if (Input.GetButtonDown("Jump") && grounded)
{
rb2d.AddForce(Vector2.up * jumpPower);
}
}
void FixedUpdate() {
Vector3 easeVelocity = rb2d.velocity;
easeVelocity.y = rb2d.velocity.y;
easeVelocity.z = 0.0f;
easeVelocity.x *= 0.75f;
float h = Input.GetAxis("Horizontal");
//Fake friction / Easing the x speed of our player
if (grounded)
{
rb2d.velocity = easeVelocity;
}
//Moving the Player
rb2d.AddForce((Vector2.right * speed) * h);
//Limiting the Speed of the Player
if (rb2d.velocity.x > maxSpeed)
{
rb2d.velocity = new Vector2(maxSpeed, rb2d.velocity.y);
}
if (rb2d.velocity.x < -maxSpeed)
{
rb2d.velocity = new Vector2(-maxSpeed, rb2d.velocity.y);
}
}
}
地面材质应用于此景观,就像其他矩形景观一样。对不起,我又是新人了,谢谢大家!
答案 0 :(得分:1)
我相信你应该看看2D Plaftormer Controller tutorial series by Sebastian Lague。该系列专注于创建一个强大的2D平台控制器,它制作精良。我观看了视频并根据它们构建了一个可行的解决方案。
该系列的fourth episode专注于攀登斜坡,下一集的重点是下降。但我仍然建议你从一开始就要耐心地跟着这个系列。 Lague总是提供非常详细的解释,说明为什么他以某种方式实现事物。
答案 1 :(得分:-1)
我也是Unity的新手,但我的想法是......你的对撞机尺寸是否可能在第一帧后重置?也许你可以手动设置对撞机保持一定角度来测试它。只是一个想法!我很想知道你发现了什么。