C# 我如何在统一中为玩家增加速度?

C# 我如何在统一中为玩家增加速度?,c#,unity3d,velocity,C#,Unity3d,Velocity,我目前正在制作一个2D游戏,我想添加一个弹跳板。作为参考,我使用了资产商店中的platformer微游戏资产。我的问题是,我的球员没有速度。有人能告诉我怎么做吗?或者你可以把代码添加到我当前的脚本中,因为我不太喜欢编码 谢谢 当前脚本: using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMovement : MonoBehaviour {

我目前正在制作一个2D游戏,我想添加一个弹跳板。作为参考,我使用了资产商店中的platformer微游戏资产。我的问题是,我的球员没有速度。有人能告诉我怎么做吗?或者你可以把代码添加到我当前的脚本中,因为我不太喜欢编码

谢谢

当前脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour {

    public CharacterController2D controller;
    public Animator animator;

    public float runSpeed = 40f;

    float horizontalMove = 0f;
    bool jump = false;
    bool crouch = false;

    // Update is called once per frame
    void Update () {

        horizontalMove = Input.GetAxisRaw("Horizontal") * runSpeed;

        animator.SetFloat("Speed", Mathf.Abs(horizontalMove));

        if (Input.GetButtonDown("Jump"))
        {
            jump = true;
            animator.SetBool("IsJumping", true);
        }

        if (Input.GetButtonDown("Crouch"))
        {
            crouch = true;
        } else if (Input.GetButtonUp("Crouch"))
        {
            crouch = false;
        }

    }

    public void OnLanding ()
    {
        animator.SetBool("IsJumping", false);
    }

    public void OnCrouching (bool isCrouching)
    {
        animator.SetBool("IsCrouching", isCrouching);
    }

    void FixedUpdate ()
    {
        // Move our character
        controller.Move(horizontalMove * Time.fixedDeltaTime, crouch, jump);
        jump = false;
    }
}

您应该使用光线投射直接向下,查看玩家是否在“弹跳板”上方。然后按照以下代码计算距离、法线和力:

float-bounceDist=0.2f//击中弹跳垫的最大距离。
LayerMask bounceMask//将遮罩指定给反弹垫。
浮力=100f//撞击弹跳垫时要施加多少力。
无效更新()
{
RaycastHit2D hit;//声明一个变量以存储光线投射信息。
if(Physics2D.Raycast(transform.position,-Vector2.up,out-hit,bounceDist,bounceMask))
{
float dist=Vector2.距离(transform.position、hit.collider.gameObject.transform.position);
dist=-dist+(bounceDist+bounceDist-0.15f);
控制器移动(hit.normal*Time.deltaTime*dist*force);
}
}
这会生成一个if语句,如果玩家以一定距离(bounceDist)和另一个特定掩码(bounceMask)击中它正下方的某个对象,则该语句将运行。然后,它将控制器移动到反弹板上的任何方向(正常)。(例如:如果将其旋转45°,则播放机将以与侧向相同的向上距离发射。)然后将其乘以
Time.deltaTime
,这样即使在不同帧速率下,也会施加相同的力。然后将力乘以
力的值
,以增加力。然后乘以距离,越近距离越大。这可以删除,但可能有用。如果If语句出现错误,应更改代码以使用If语句检查命中对象上的标记是否为某个标记: 您应该使用光线投射直接向下,查看玩家是否在“弹跳板”上方。然后按照以下代码计算距离、法线和力:

float-bounceDist=0.2f//击中弹跳垫的最大距离。
浮力=100f//撞击弹跳垫时要施加多少力。
无效更新()
{
RaycastHit2D hit;//声明一个变量以存储光线投射信息。
Physics2D.Raycast(transform.position,-Vector2.up,out-hit,bounceDist,bounceMask);
如果(hit.collider.gameObject.tag==“bouncePad”)
{
float dist=Vector2.距离(transform.position、hit.collider.gameObject.transform.position);
dist=-dist+(bounceDist+bounceDist-0.15f);
控制器移动(hit.normal*Time.deltaTime*dist*force);
}
}

我建议使用直接向下转换。然后得到正常的命中率。法线直接从三角形向上。然后使用角色控制器,将玩家移动法线乘以某个力乘以时间。deltaTime乘以玩家到光线投射命中的时间。如果你需要更多的帮助,我会发布一个答案。我已经发布了我的答案,所以你也应该检查一下。