#c#
Вопрос:
Я создаю гоночную игру с намеренно ужасным рулевым управлением, в которой персонаж вращается вокруг центра карты. У игрока также есть возможность установить точку поворота в их текущее местоположение с помощью пробела. Он работает менее чем в 25% случаев. Код для этой части кода является
if (Input.GetKeyDown("space"))
{
PivotPoint.position = CharacterRotation.position;
}
Остальная часть кода находится здесь
using System.Collections;
using System.Collections.Generic;
using System.Data;
using UnityEngine;
public class PlayerController : MonoBehaviour
{ //movement
public CharacterController characterController;
public float speed = 6;
private float hiddenSpeed = 6;
public float sprintMultiplier = 1.75f;
//rotation
public Transform CharacterRotation;
public Transform PivotPoint;
//gravity
public float gravity = 5f;
private float verticalSpeed = 0;
//camera and camera rotation
public Transform cameraHolder;
public float mouseSensitivity = 2f;
public float upLimit = -50;
public float downLimit = 50;
void start()
{
hiddenSpeed = speed;
}
void Update()
{
Move();
Rotate();
Inputs();
}
private void Move()
{ //movement
float horizontalMove = 0;
float verticalMove = Input.GetAxis("Vertical");
//gravity
if (characterController.isGrounded) verticalSpeed = 0;
else verticalSpeed -= gravity * Time.deltaTime;
//move update
Vector3 gravityMove = new Vector3(0, verticalSpeed, 0);
Vector3 move = transform.forward * verticalMove transform.right * horizontalMove;
characterController.Move(speed * Time.deltaTime * move gravityMove * Time.deltaTime);
}
public void Rotate()
{
float horizontalRotation = Input.GetAxis("Horizontal");
float verticalRotation = Input.GetAxis("Mouse Y");
transform.Rotate(0, horizontalRotation * mouseSensitivity, 0);
cameraHolder.Rotate(-verticalRotation * mouseSensitivity, 0, 0);
Vector3 currentRotation = cameraHolder.localEulerAngles;
if (currentRotation.x > 180) currentRotation.x -= 360;
currentRotation.x = Mathf.Clamp(currentRotation.x, upLimit, downLimit);
cameraHolder.localRotation = Quaternion.Euler(currentRotation);
}
public void Inputs()
{
if (Input.GetKeyDown("space"))
{
PivotPoint.position = CharacterRotation.position;
}
if (Input.GetKey("r"))
{
CharacterRotation.position = new Vector3(0f, .133f, 0f);
PivotPoint.position = new Vector3(0f, .133f, 0f);
}
}
}
Комментарии:
1. Не могли бы вы уточнить, пожалуйста, — когда вы говорите, что это работает в 25% случаев, какое поведение вы видите в остальных 75%? Он использует неправильное расположение или ему не хватает нажатия клавиши пробела?
2. Большую часть времени куб перемещается на удвоенный текущий радиус, когда должна перемещаться только точка поворота, в то время как куб остается неподвижным.