Абсолютный новичок в Unity.
Столкнулся с проблемой.
Есть стена, на которой висит box collider, а есть игрок, у которого есть и Rigidbody и Box collider соответственно
P.S. не обращайте внимание на модельку игрока, игра делается ради шутки и первого проекта.
Когда я пытаюсь пройти сквозь стену, персонаж не останавливается, а проходит сквозь неё но с замедлением. Как оказалось стена игрока "выплёвывает" из себя, но не останавливает полностью. Это от скорости не зависит.
PlayerController.csusing UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class PlayerController : MonoBehaviour
{
[SerializeField]
private float speed = 5f;
[SerializeField]
private float lookSpeed = 3f;
private PlayerMotor motor;
void Start()
{
motor = GetComponent<PlayerMotor>();
}
void Update()
{
float xMov = Input.GetAxisRaw("Horizontal");
float zMov = Input.GetAxisRaw("Vertical");
Vector3 movHor = transform.right * xMov * speed;
Vector3 movVer = transform.forward * zMov * speed;
Vector3 velocity = (movHor + movVer).normalized;
motor.Move(velocity*speed);
float yRot = Input.GetAxisRaw("Mouse X");
Vector3 rotation = new Vector3(0f, yRot , 0f) * lookSpeed;
float xRot = Input.GetAxisRaw("Mouse Y");
Vector3 CamRotation = new Vector3(xRot, 0f, 0f) * lookSpeed;
motor.RotateCam(CamRotation);
motor.Rotate(rotation);
}
}
PlayerMotor.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class PlayerMotor : MonoBehaviour
{
[SerializeField]
private Camera cam;
private Rigidbody rb;
private Vector3 velocity = Vector3.zero;
private Vector3 rotation = Vector3.zero;
private Vector3 rotationCamera = Vector3.zero;
void Start()
{
rb = GetComponent<Rigidbody>();
}
public void Move(Vector3 _vel)
{
velocity = _vel;
}
public void Rotate(Vector3 _rot)
{
rotation = _rot;
}
public void RotateCam(Vector3 _rotat)
{
rotationCamera = _rotat;
}
void FixedUpdate()
{
PerformMove();
PerformRotation();
}
void PerformMove()
{
if (velocity != Vector3.zero)
rb.MovePosition(rb.position + velocity * Time.fixedDeltaTime);
}
void PerformRotation()
{
rb.MoveRotation(rb.rotation * Quaternion.Euler(rotation));
if (cam != null)
cam.transform.Rotate(-rotationCamera);
}
}
Возможно вопрос дубликат, просто мне не удалось найти то, что может решить эту проблему.
Я пробовал изменять различные переменные и вертел по всякому - безрезультатно.
Это скорость, границы box collider'a, толщина стены(так игрок вообще под карту проваливается), самые разные параметры игрока и стены вплоть до текстур.
Кто сталкивался с подобным? Ответ на этот вопрос поможет многим, т.к. эта ошибка возникла на первых стадиях создания игры. Спасибо.