首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity - Shift to sprint

Unity - Shift to sprint
EN

Stack Overflow用户
提问于 2020-04-28 19:02:37
回答 1查看 1.4K关注 0票数 0

朋友们,新开发人员问,我浏览了很多网站,尝试了许多不同的脚本,将脚本与球员移动和其他脚本分开,但都无济于事,我想这是我所见过的东西的集合体,但它也根本不起作用。我在subreddits或者这个上面找不到任何东西。我知道我的普通移动代码可能很难看,但它可以工作。希望您能帮忙,谢谢!

为了澄清这一点,这是让玩家在按住Shift键的同时进行冲刺,感谢那些提醒我详细说明的人。

代码语言:javascript
复制
using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  
[RequireComponent(typeof(UnityEngine.AI.NavMeshAgent))]  
public class PlayerMovement : MonoBehaviour  
{  
    UnityEngine.AI.NavMeshAgent agent;  
    private Rigidbody rb;  
    public float movementSpeed = 5.0f;  
    public float clockwise = 1000.0f;  
    public float counterClockwise = -5.0f;  
    public float Speed = 5.0f;  
    public Vector3 jump;  
    public float jumpForce =1.0f;  
    public float shiftSpeed = 10.0f;  

    public bool isGrounded;  

    void Start()  
    {  
        rb = GetComponent<Rigidbody>();  
        jump = new Vector3(0.0f, 1.0f, 0.0f);  
        agent = GetComponent<UnityEngine.AI.NavMeshAgent>();  
    }

    void OnCollisionStay()  
    {  
        isGrounded = true;  
    }  

    void Update()  
    {  
        if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))  
        {  
            transform.position += transform.forward \* Time.deltaTime \* movementSpeed;  

        }  
        else if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.LeftShift))  
        {  
            transform.position += transform.forward \* Time.deltaTime \* shiftSpeed;  
        }  
        else if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))  
        {  
            transform.position -= transform.forward \* Time.deltaTime \* movementSpeed;  

        }  
        else if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow) && Input.GetKey(KeyCode.LeftShift))  
        {  
            transform.position += transform.forward \* Time.deltaTime \* shiftSpeed;  
        }  
        else if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))  
        {  
            GetComponent<Rigidbody>().position += Vector3.left \* Time.deltaTime \* movementSpeed;  
        }  
        else if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow) && Input.GetKey(KeyCode.LeftShift))  
        {  
            transform.position += transform.forward \* Time.deltaTime \* shiftSpeed;  
        }  
        else if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))  
        {  
            GetComponent<Rigidbody>().position += Vector3.right \* Time.deltaTime \* movementSpeed;  
        }  
        else if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow) && Input.GetKey(KeyCode.LeftShift))  
        {  
            transform.position += transform.forward \* Time.deltaTime \* shiftSpeed;  
        }  
        if (Input.GetKeyDown(KeyCode.Space) && isGrounded)  
        {  
            rb.AddForce(jump \* jumpForce, ForceMode.Impulse);  
            isGrounded = false;  
        }  
    }  
}  
EN

回答 1

Stack Overflow用户

发布于 2020-04-28 19:17:48

我假设你在问的是“当我按住Shift键的时候,如何让我的玩家移动得更快?”

我建议使用两个常量来表示步行速度和跑步速度。然后是另一个根据是否按住Shift键而变化的变量:

代码语言:javascript
复制
private const float walkSpeed = 5.0f;
private const float runSpeed = 10.0f;

private float moveSpeed = walkSpeed;    // Our current movement speed

//...

void Update() {

    //...

    if (Input.GetKey(KeyCode.LeftShift) {
        // Set current speed to run if shift is down
        moveSpeed = runSpeed;
    }
    else {
        // Otherwise set current speed to walking speed
        moveSpeed = walkSpeed;
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61478642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档