@Romeo558
Продолжающий программист на python.

Почему игрока выталкивает из стены, но пройти сквозь неё он может?

Абсолютный новичок в Unity.
Столкнулся с проблемой.
Есть стена, на которой висит box collider, а есть игрок, у которого есть и Rigidbody и Box collider соответственно
6394e3df342a0667866769.png
6394e485e96ad222447396.png
P.S. не обращайте внимание на модельку игрока, игра делается ради шутки и первого проекта.

Когда я пытаюсь пройти сквозь стену, персонаж не останавливается, а проходит сквозь неё но с замедлением. Как оказалось стена игрока "выплёвывает" из себя, но не останавливает полностью. Это от скорости не зависит.

PlayerController.cs
using 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.cs
using 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, толщина стены(так игрок вообще под карту проваливается), самые разные параметры игрока и стены вплоть до текстур.
Кто сталкивался с подобным? Ответ на этот вопрос поможет многим, т.к. эта ошибка возникла на первых стадиях создания игры. Спасибо.
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
Kentavr16
@Kentavr16
long cold winter
для движения персонажа используй addForce а не transform, и будет счастье. Если ты хочешь физического поведения, используй физику. Транслейт просто пихает по траектории. addforce к компоненту rigidbody
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы