Pewnie zastanawiacie się po co was tu wezwałem :D
A tak poważnie, podczas tworzenia skryptu poruszania postaci w unity 3D (perspektywa FPS) oraz używając języka C# teoretycznie wszystko działa. Biegam i skacze, ale problem pojawia się przy schodzeniu z górki lub skakaniu, tzn zamiast ładnie szybko opadać czy tam spadać to postać tak jakby szybowała. Zmiana grawitacji w Rigidbody, ustawieniach projektu oraz poprzez skrypt nic nie dała. Zmiana masy postaci również.
Próbowałem zrobić to w sposób zmiany velocity na new Vector3(0f, -1f, 0f); gdzie wartość Y była różna, problem zmienia się na brak możliwości skoku oraz wchodzenia pod górkę.
Będę wdzięczny za wszelkie linki i podpowiedzi. W unity 3D i c# jestem od dzisiaj XD
Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Controller : MonoBehaviour
{
private Vector3 PlayerMovementInput;
private Vector2 PlayerMouseInput;
private float xRot;
[SerializeField] private Transform FeetTransform;
[SerializeField] private LayerMask FloorMask;
[SerializeField] private Rigidbody PlayerBody;
[SerializeField] private Camera PlayerCamera;
[Space]
[SerializeField] private float Speed;
[SerializeField] private float Sensitivity;
[SerializeField] private float Jumpforce;
[SerializeField] private float Sprint;
// Update is called once per frame
void Update()
{
PlayerMovementInput = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical"));
PlayerMouseInput = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
MovePlayer();
MovePlayerCamera();
}
private void MovePlayer()
{
Vector3 MoveVector = transform.TransformDirection(PlayerMovementInput) * Speed;
PlayerBody.velocity = new Vector3(MoveVector.x, PlayerBody.velocity.y, MoveVector.z);
if (Input.GetKeyDown(KeyCode.Space))
{
if (Physics.CheckSphere(FeetTransform.position, 0.1f, FloorMask))
{
PlayerBody.AddForce(Vector3.up * Jumpforce, ForceMode.Impulse);
}
}
}
private void MovePlayerCamera()
{
xRot -= PlayerMouseInput.y * Sensitivity;
transform.Rotate(0f, PlayerMouseInput.x * Sensitivity, 0f);
PlayerCamera.transform.localRotation = Quaternion.Euler(xRot, 0f, 0f);
}
}