Как исправить ошибку пропуска столкновений на контроллере персонажа?C#

Место общения программистов C#
Ответить
Anonymous
 Как исправить ошибку пропуска столкновений на контроллере персонажа?

Сообщение Anonymous »

У меня есть объект игрока, который является родительским для объекта цилиндра (просто для спрайта), объекта MainCamera и объекта checkGround, чтобы я мог проверить, касается ли он земли, чтобы совершить прыжок. Следующий код — это мой код перемещения игрока, и, несмотря на то, что он пропускает движения в определенных условиях, он работает совершенно нормально. У меня также есть скрипт mouseMovement (прикреплен ниже), который позволяет вращать камеру от первого лица (что фактически вращает сам объект игрока). Я зафиксировал вращение от -45 до 45 градусов по оси Y, чтобы игрок мог смотреть вверх или вниз по земле. Всякий раз, когда я поворачиваю камеру на определенный угол (а вращение игрока достигает определенного числа), если я двигаюсь в противоположную сторону, к которой наклоняюсь, объект начинает прыгать (слегка подпрыгивать). И если я нажму прыжок во время такого прыжка, объект подпрыгнет (я полагаю) на двойную высоту прыжка. И наоборот: мои прыжковые действия в том направлении, на которое я опираюсь, затруднены, я полагаю, на половину высоты моего прыжка.

Код: Выделить всё

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

public class playerMovement : MonoBehaviour
{
public CharacterController controller;

public float speed = 0f;
public float gravity = -9.81f * 2;
public float jumpHeight = 3f;

public Transform groundCheck;
public float groundDistance = 0.5f;
public LayerMask groundMask;

Vector3 velocity;
public bool isGrounded;

void Update()
{
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);

if (isGrounded && velocity.y < 0)
{
velocity.y = -2f;
}

float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");

Vector3 move = transform.right * x + transform.forward * z;
controller.Move(move * speed * Time.deltaTime);

if (Input.GetButtonDown("Jump") && isGrounded)
{
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
}

velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
}
}

Код: Выделить всё

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

public class mouseMovement : MonoBehaviour
{
public float mouseSensitivity = 500f;

float xRotation = 0f;
float yRotation = 0f;
public float groundDistance = 0.8f;

public Transform groundCheck;
Vector3 initialGroundCheckLocalPosition;
Vector3 groundCheckOffset;

void Start()
{
Cursor.lockState = CursorLockMode.Locked;
groundCheckOffset = groundCheck.position - transform.position;
}

void Update()
{
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

// yukarı aşağı bakma mekaniği
xRotation -= mouseY;

// bakış açısının dönüş sınırını belirlemek için (sonsuza kadar yukarı veya aşağı bakmamak için)
xRotation = Mathf.Clamp(xRotation, -45f, 45f);

// sağa sola bakma mekaniği
yRotation += mouseX;

transform.localRotation = Quaternion.Euler(xRotation, yRotation, 0f);
AdjustGroundCheckPosition();
}

void AdjustGroundCheckPosition()
{
Vector3 adjustedPosition = transform.position + transform.rotation * initialGroundCheckLocalPosition;
groundCheck.position = adjustedPosition;
}
}

Я проконсультировался с ChatGPT и подправил несколько вещей, но они не сработали. Я вмешивался и иногда сбрасывал смещение, но это тоже не помогло. Он посоветовал мне сделать коэффициент сглаживания, код которого он также предоставил, но это не сработало. Что я должен делать? (Примечание: я начинающий разработчик игр, и я был бы признателен, если бы вы дали краткое объяснение при использовании терминов.)

Подробнее здесь: https://stackoverflow.com/questions/786 ... controller
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»