• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Szybowanie Unity 3d/C#

42 Warsaw Coding Academy
0 głosów
269 wizyt
pytanie zadane 31 maja 2022 w C# przez Routa Nowicjusz (160 p.)
zamknięte 31 maja 2022 przez Routa

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);
    }
}

 

komentarz zamknięcia: Problem rozwiązany

1 odpowiedź

0 głosów
odpowiedź 31 maja 2022 przez Routa Nowicjusz (160 p.)
Generalnie jestem debilem XD

Miałem cały czas ustawione Drag w Rigidbody na 10 i to stanowiło problem XD

Można zamknąć, albo sam zamknę jak mogę :D

Podobne pytania

0 głosów
0 odpowiedzi 365 wizyt
pytanie zadane 25 września 2018 w Nasze projekty przez mati2210 Obywatel (1,110 p.)
0 głosów
1 odpowiedź 427 wizyt
pytanie zadane 27 kwietnia 2021 w C# przez norbertc Początkujący (410 p.)
0 głosów
3 odpowiedzi 639 wizyt
pytanie zadane 16 grudnia 2015 w C# przez vverum Gaduła (4,340 p.)

93,395 zapytań

142,388 odpowiedzi

322,566 komentarzy

62,753 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...