#c# #unity3d
#c# #unity3d
Вопрос:
итак, я боролся с этим около 3 часов, пытаясь заставить это работать, так что извините за мой спагетти-код. этот сценарий заставляет персонажа двигаться, а также спринт. я не вижу, как добавить больше к этому абзацу, я полагаю, что я изложил довольно лаконично и рассказал помощникам, в чем моя проблема
if (Input.GetKeyDown(KeyCode.LeftShift) amp;amp; isGrounded)
{
moveSpeed = 10f;
}
if (Input.GetKeyUp(KeyCode.LeftShift) amp;amp; isGrounded)
{
moveSpeed = 6f;
}
но, похоже, после того, как я добавил сценарий для замедления спринта в воздухе, перестал работать
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
public Rigidbody rb;
public Transform _camera;
public float moveSpeed = 6f;
float jumpForce = 5f;
public LayerMask Ground;
bool isGrounded;
bool Landed;
void Start()
{
}
void Update()
{
//grounding
isGrounded = Physics.CheckSphere(new Vector3(transform.position.x, transform.position.y - 1, transform.position.z), 0.4f, Ground);
Landed = isGrounded
//facing direction
Debug.DrawLine(_camera.position, transform.forward * 2.5f);
//SPRINTING
if (isGrounded == false)
{
moveSpeed = 2f;
}
else
{
if (Input.GetKeyUp(KeyCode.W) == false)
{
moveSpeed = 6f;
}
if (Input.GetKeyDown(KeyCode.LeftShift) amp;amp; isGrounded)
{
moveSpeed = 10f;
}
if (Input.GetKeyUp(KeyCode.LeftShift) amp;amp; isGrounded)
{
moveSpeed = 6f;
}
}
//moving
float x = Input.GetAxisRaw("Horizontal") * moveSpeed;
float y = Input.GetAxisRaw("Vertical") * moveSpeed;
//jumping
if (Input.GetKeyDown(KeyCode.Space) amp;amp; isGrounded)
rb.velocity = new Vector3(rb.velocity.x, jumpForce, rb.velocity.z);
//setting movement
Vector3 move = transform.right * x transform.forward * y;
rb.velocity = new Vector3(move.x, rb.velocity.y, move.z);
}
}
Комментарии:
1. в
else
части выamp;amp; isGrounded
бесполезны, потому что вы уже знаете, что этоtrue
(именно потому, что вы вelse
части)
Ответ №1:
Возможно, какой-то псевдокод может быть:
if(isGrounded)
{
moveSpeed = isSprinting
? 10f // sprinting on ground
: 6f; // walking on ground
}
else
{
moveSpeed = isSprinting
? 3f // sprinting in the air
: 2f; // moving in the air
}
Или наоборот:
if(isSprinting)
{
moveSpeed = isGrounded
? 10f // sprinting on ground
: 3f; // sprinting in the air
}
else
{
moveSpeed = isGrounded
? 6f // walking on ground
: 2f; // moving in the air
}