unity3d - Unity - 转向冲刺
问题描述
朋友们,新开发者问,我浏览了很多网站并尝试了很多不同的脚本,将脚本与玩家移动和其他脚本分开,但无济于事,并提出了这个作为我所见但它也没有根本不工作。我在 subreddits 或这个中找不到任何东西。我知道我的正常运动代码可能很难看,但它可以工作。希望你能帮忙谢谢!
为了澄清这是让玩家在按住 shift 键的同时冲刺感谢那些提醒我详细说明的人。
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;
}
}
}
解决方案
我假设您要问的是“当我按住 shift 键时如何让我的玩家移动得更快?”
我建议为步行速度和跑步速度设置两个常数。然后另一个变量会根据是否按住 shift 键而改变:
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;
}
}
推荐阅读
- php - 需要laravel中动态时间的空闲时间段
- java - logback:在滚动之前签署日志文件
- geolocation - 雪花查询以获取多边形内的数据
- mysql - 在mysql中仅插入时间戳中的日期
- jquery - 悬停时更改班级背景
- javascript - 设置显示编码页面请求
- tensorflow - 张量流中有logit函数吗?
- javascript - 在元素的开头生成innerHTML
- java - 错误 [org.apache.catalina.core.ContainerBase.[jboss.web].exception: java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStack
- node.js - 无法启动 ioinc 3 项目