如何使角色从高角度的斜坡上滑下来?


9

我目前正在Unity3D中研究角色的动作。我设法使他相对于鼠标光标移动。我将坡度限制设置为45°,这不允许角色以更高的角度爬山。但是他仍然可以跳起来。

当他跳到坡度过高的地方时,如何使他再次滑落?

提前致谢。

编辑:我的基本动作的代码片段。使用UnityEngine; 使用System.Collections;

public class BasicMovement : MonoBehaviour {
    private float speed;
    private float jumpSpeed;
    private float gravity;
    private float slopeLimit;
    private Vector3 moveDirection = Vector3.zero;

    void Start() 
    {
        PlayerSettings settings = GetComponent<PlayerSettings>();
        speed = settings.GetSpeed();
        jumpSpeed = settings.GetJumpSpeed();
        gravity = settings.GetGravity();
        slopeLimit = settings.GetSlopeLimit();
    }

    void Update() {
        CharacterController controller = GetComponent<CharacterController>();
        controller.slopeLimit = slopeLimit;

        if (controller.isGrounded) {
            moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;

            if (Input.GetButton("Jump")) {
                moveDirection.y = jumpSpeed;
            }

        }
        moveDirection.y -= gravity * Time.deltaTime;
        controller.Move(moveDirection * Time.deltaTime);
    }
}

需要更多信息:您正在使用物理学吗?这些斜坡是在使用地形系统还是其他工具?哪些要素在控制您的角色?这是2D还是3D游戏?
Kylotan'3

您是说玩家尝试跳跃时还是完成跳跃并撞到斜坡时滑动?
tyjkenn 2012年

@tyjkenn我的意思是当他完成跳跃时。就像在《超级马里奥64》中一样。当他降落在地面上并且该地面的角度太大时,他应该向下滑动到角度等于thelopeLimit的点。
凯纳贝尔2012年

@Kylotan好吧,我是Unity的新手。因此,我会尽力给出一个答案。我使用角色控制器创建了一个角色-没有刚体。按下键时我使他移动,并使他相对于光标行走。我创建了一个地形并使用按钮(哦,我的声音听起来很愚蠢)来创建一些山脉。这将是一款外观和相机风格类似WarCraft III的3D游戏。
凯纳贝尔2012年

Answers:


1

碰到地面时,您的制动是错误的,您只需停止垂直运动即可,但这仅是地面平坦时地面撞击的工作方式。

您应该做的是moveDirection在被击打的表面上投影,这将为您带来新的感觉moveDirection。如果您的库具有将向量投影到平面或曲面上的功能,则应使用该功能。如果不是,则应moveDirectionmoveDirection自身减去法线在表面法线上的投影。


有些游戏确实使用相同的行为,例如 天际,使用完全相同的制动方法。问题是即使角色不在地面上,角色也可能跳跃。
Ali1S232 2012年

0

只是在跳跳之前先检查一下角色是否站在地面上,我的意思是说他是否不在高角度的斜坡上。并把其他东西留给物理引擎。

根据您提供的代码,我可以看到问题出在哪里:

根据Unity脚本参考CharacterController.isGrounded仅当角色接触地面时才返回。它不检查slopelimit。稍作搜索后,FPSWalkerEnhanced似乎可以解决您的问题。


好吧,我确实在每次移动之前检查角色是否接地。
凯纳贝尔2012年

@keinabel,那么他不应该跳下去。他可以通过跳上坡的唯一方法是即使他不在坚实的地面上也可以跳。我的意思是,就像您检查他是否不能走上斜坡一样。如果他由于倾斜而无法在至少一个方向上行走,那么他根本就不会跳跃。
Ali1S232'3

如果我在帖子中添加“运动代码”,会有所帮助吗?
凯纳贝尔2012年

我想可以直接指出这个问题。
Ali1S232 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.