Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Unity C#] Jednoczesne obracanie i poruszanie gracza

Ostatnio zmodyfikowano 2024-09-03 20:51
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
[Unity C#] Jednoczesne obracanie i poruszanie gracza
» 2024-09-03 20:09:03
Nie mogę jednocześnie obracać postaci i jej przemieszczać do przodu.

C/C++
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;


public class PlayerController
: MonoBehaviour
{
   
   
public Rigidbody rb;
   
public Animator animator;
   
private Vector3 movement;
   
private float movementSpeed = 1.0f;
   
private float rotateSpeed = 0.25f;
   
private float animSpeed = 1.0f;
   
   
   
   
// Start is called before the first frame update
   
void Start()
   
{
       
rb = GetComponent < Rigidbody >();
       
animator = GetComponent < Animator >();
       
animator.Play( "idle" );
       
animator.speed = animSpeed;
   
}
   
   
   
// Update is called once per frame
   
void Update()
   
{
       
float rotate = Input.GetAxis( "Horizontal" );
       
float move = Input.GetAxis( "Vertical" );
       
       
// tak blisko, a tak daleko...
        // nie działa jednoczesna rotacja i ruch. Gdy jednocześnie będziemy obracać i ruszać postacią do przodu to wykona tylko obrót.
       
transform.Rotate( 0, rotate * rotateSpeed, 0 );
       
movement = transform.forward * move * movementSpeed;
       
//
       
       
if( movement != Vector3.zero || rotate != 0 )
           
 animator.Play( "walk" );
       
else
           
 animator.Play( "idle" );
       
       
       
   
}
   
   
private void FixedUpdate()
   
{
       
rb.MovePosition( rb.position + movement * Time.fixedDeltaTime );
   
}
}
P-181551
tBane
Temat założony przez niniejszego użytkownika
» 2024-09-03 20:51:52
Trzeba modyfikować RigidBody w void FixedUpdate();

C/C++
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UIElements;

public class PlayerController
: MonoBehaviour
{
   
public Rigidbody rigidbody;
   
public Animator animator;
   
   
private float movementSpeed = 10.0f;
   
private float rotationSpeed = 360.0f;
   
private float animSpeed = 1.0f;
   
   
private float move;
   
private float rotate;
   
   
private Vector3 movement;
   
private Quaternion rotation = Quaternion.Euler( 0, 0, 0 );
   
   
// Start is called before the first frame update
   
void Start()
   
{
       
rigidbody = GetComponent < Rigidbody >();
       
animator = GetComponent < Animator >();
       
animator.Play( "idle" );
       
animator.speed = animSpeed;
   
}
   
   
// Update is called once per frame
   
void Update()
   
{
       
rotate = Input.GetAxis( "Horizontal" );
       
move = Input.GetAxis( "Vertical" );
       
       
movement = transform.forward * move * movementSpeed * Time.deltaTime;
       
rotation = Quaternion.Euler( 0f, rotate * rotationSpeed * Time.deltaTime, 0f );
       
       
// Animacje
       
if( movement != Vector3.zero || rotation != Quaternion.Euler( 0.0f, 0.0f, 0.0f ) )
           
 animator.Play( "walk" );
       
else
           
 animator.Play( "idle" );
       
   
}
   
   
private void FixedUpdate()
   
{
       
// Movement and Rotation
       
rigidbody.MovePosition( rigidbody.position + movement );
       
rigidbody.MoveRotation( rigidbody.rotation * rotation );
   
}
}
P-181552
« 1 »
  Strona 1 z 1