[Duvida] Multiplayer Moviment Client [Bug?!]
3 participantes
Página 1 de 1
[Duvida] Multiplayer Moviment Client [Bug?!]
- Código:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using System.Collections.Generic;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
public class PlayerBehaviour : NetworkBehaviour
{
public float m_GroundCheckDistance = 0.11f;
public float speed = 3.0f;
public float rotateSpeed = 15f;
[SyncVar]
public bool m_IsGrounded;
[SyncVar]
public bool m_IsStrafing;
Animator _Animator;
Rigidbody m_Rigidbody;
Transform m_Camera;
public Text run;
public float speedOffset = 0f;
PhysicMaterial frictionPhysics;
PhysicMaterial maxFrictionPhysics;
void Start()
{
if (!isLocalPlayer)
{
return;
}
Cursor.visible = false;
_capsuleCollider = GetComponent <CapsuleCollider> ();
transform.tag = "Player";
_Animator = GetComponent<Animator>();
m_Rigidbody = GetComponent<Rigidbody>();
run = GameObject.Find ("AddVelocity").GetComponent <Text> ();
m_Camera = Camera.main.transform;
speedOffset = 0f;
frictionPhysics = new PhysicMaterial();
frictionPhysics.name = "frictionPhysics";
frictionPhysics.staticFriction = .25f;
frictionPhysics.dynamicFriction = .25f;
frictionPhysics.frictionCombine = PhysicMaterialCombine.Multiply;
maxFrictionPhysics = new PhysicMaterial();
maxFrictionPhysics.name = "maxFrictionPhysics";
maxFrictionPhysics.staticFriction = 1f;
maxFrictionPhysics.dynamicFriction = 1f;
maxFrictionPhysics.frictionCombine = PhysicMaterialCombine.Maximum;
_capsuleCollider.material = frictionPhysics;
}
void Update()
{
if (!isLocalPlayer)
{
return;
}
if (speedOffset <= 0) {
speedOffset = 0;
} else {
speedOffset -= 0.2f * Time.deltaTime;
}
run.text = speedOffset.ToString ("F1");
m_IsGrounded = (Physics.Raycast(transform.position + (Vector3.up * 0.1f), Vector3.down,m_GroundCheckDistance));
m_IsStrafing = true;
CmdGrounded (m_IsGrounded);
CmdStrafing (m_IsStrafing);
if (Input.GetAxis ("Vertical") > 0 || Input.GetAxis ("Horizontal") != 0) {
RotateWithAnotherTransform (m_Camera);
} else {
transform.rotation = _Animator.rootRotation;
}
if (m_IsGrounded)
{
Vector3 v = (_Animator.deltaPosition * (speed > 0 ? speed : 1f)) / Time.deltaTime;
v.y = m_Rigidbody.velocity.y;
m_Rigidbody.velocity = Vector3.Lerp (m_Rigidbody.velocity, v, 20f * Time.deltaTime);
input = new Vector2 (Input.GetAxis ("Horizontal"), Input.GetAxis ("Vertical"));
if (input == Vector2.zero)
_capsuleCollider.material = maxFrictionPhysics;
else
_capsuleCollider.material = frictionPhysics;
}
CheckGround ();
UpdateAnimator();
}
Vector2 input;
public Quaternion targetRotation;
public virtual void RotateWithAnotherTransform(Transform referenceTransform)
{
if (GetComponent <Controle> ().follow) {
var newRotation = new Vector3 (transform.eulerAngles.x, referenceTransform.eulerAngles.y, transform.eulerAngles.z);
transform.rotation = Quaternion.Lerp (transform.rotation, Quaternion.Euler (newRotation), rotateSpeed * Time.fixedDeltaTime);
targetRotation = transform.rotation;
}
}
[Command]
void CmdGrounded(bool isGrounded)
{
RpcGrounded (isGrounded);
}
[ClientRpc]
void RpcGrounded(bool isGrounded)
{
m_IsGrounded = isGrounded;
}
[Command]
void CmdStrafing(bool isStrafing)
{
RpcStrafing(isStrafing);
}
[ClientRpc]
void RpcStrafing(bool isStrafing)
{
m_IsStrafing = isStrafing;
}
void CheckGround()
{
if (_capsuleCollider != null)
{
float colliderHeight = _capsuleCollider.height;
float radius = _capsuleCollider.radius * 0.9f;
var dist = 10f;
Vector3 pos = transform.position + Vector3.up * (_capsuleCollider.radius);
Ray ray1 = new Ray(transform.position + new Vector3(0, colliderHeight / 2, 0), Vector3.down);
Ray ray2 = new Ray(pos, -Vector3.up);
if (Physics.Raycast (ray1, out groundHit, colliderHeight / 2 + 2f)) {
dist = transform.position.y - groundHit.point.y;
}
if (Physics.SphereCast (ray2, radius, out groundHit, _capsuleCollider.radius + 2f, groundLayer)) {
if (dist > (groundHit.distance - _capsuleCollider.radius * 0.1f)) {
dist = (groundHit.distance - _capsuleCollider.radius * 0.1f);
}
}
groundDistance = (float)System.Math.Round(dist, 2);
}
}
void UpdateAnimator()
{
_Animator.SetFloat ("InputHorizontal", Input.GetAxis ("Horizontal"), 0.1f, Time.deltaTime);
if (Input.GetAxis ("Vertical") == 0) {
_Animator.SetFloat ("InputVertical", Input.GetAxis ("Vertical"), 0.02f, Time.deltaTime);
} else {
_Animator.SetFloat ("InputVertical", Input.GetAxis ("Vertical") + speedOffset, 0.1f, Time.deltaTime);
}
_Animator.SetBool ("IsGrounded", m_IsGrounded);
_Animator.SetBool ("IsStrafing", m_IsStrafing);
_Animator.SetFloat ("GroundDistance", groundDistance);
if (!m_IsGrounded) {
_Animator.SetFloat ("VerticalVelocity", m_Rigidbody.velocity.x);
}
}
public LayerMask groundLayer = 1 << 0;
RaycastHit groundHit;
public CapsuleCollider _capsuleCollider;
public float groundDistance;
}
Tenho esse script para a movimentação e as animações do player
Mas o problema eh que para o server ocorre tudo certo, mas o cliente faz as animações mas não se movimenta
Estou fazendo algo errado?
Phph09- Profissional
- PONTOS : 3789
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [Duvida] Multiplayer Moviment Client [Bug?!]
Você pode usar esse Script aqui:
https://www.schultzgames.com/t7271-tutorial-smooth-movement-unity-unet?highlight=smooth
(É só colocar ele no Player e Kchau, Sync Smooth!)
https://www.schultzgames.com/t7271-tutorial-smooth-movement-unity-unet?highlight=smooth
(É só colocar ele no Player e Kchau, Sync Smooth!)
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: [Duvida] Multiplayer Moviment Client [Bug?!]
Souris escreveu:Você pode usar esse Script aqui:
https://www.schultzgames.com/t7271-tutorial-smooth-movement-unity-unet?highlight=smooth
(É só colocar ele no Player e Kchau, Sync Smooth!)
Mas o problema nao é na sincronização, e sim o client que nao movimenta, ele faz as animações mas fica sempre parado
Phph09- Profissional
- PONTOS : 3789
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [Duvida] Multiplayer Moviment Client [Bug?!]
Mas eu não estou vendo absolutamente nada para sincronizar sua movimentação.
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: [Duvida] Multiplayer Moviment Client [Bug?!]
Eu estava usando esse script em um projeto em um ThirdPersonCharacter funciona direito
- Código:
using UnityEngine;
using System.Collections;
using UnityStandardAssets.CrossPlatformInput;
using System;
using System.Collections.Generic;
using UnityEngine.Networking;
[RequireComponent(typeof(CapsuleCollider))]
[RequireComponent(typeof(Rigidbody))]
public class PlayerMovemento : NetworkBehaviour {
public float velocidade;
public float direcao;
private Vector3 moveDirection;
public Animator anim;
public bool jump;
void Awake (){
}
void Start (){
velocidade = 0;
direcao = 0;
anim = GetComponent<Animator> ();
}
void Update()
{
if(!GetComponent<NetworkView>().isMine)
return;
if(PlayerStatus.deadPlayer == false){
CheckMove();
CheckJump();
}
}
private void CheckMove()
{
if(!isLocalPlayer)
return;
transform.Translate(0,0,velocidade*Time.deltaTime*velocidade);
velocidade = Mathf.Abs(Input.GetAxis("Vertical"));
anim.SetFloat("velocidade",velocidade);
transform.Translate(0,0,direcao*Time.deltaTime*direcao);
direcao = Input.GetAxis("Horizontal");
anim.SetFloat("direcao",direcao);
}
protected void CheckJump()
{
if(!isLocalPlayer)
return;
if(Input.GetButtonDown("Jump") && jump == false){
jump = true;
anim.SetBool("isJump",true);
StartCoroutine(JumpTempo());
}
}
IEnumerator JumpTempo(){
yield return new WaitForSeconds(3.0f);
jump = false;
anim.SetBool("isJump",false);
}
}
Tópicos semelhantes
» [Dúvida] Multiplayer Client Object Spawn
» Adicionar uma camera apenas em um client [Multiplayer]
» Multiplayer Unet: no meio da partida os client saem do nada(sistema de Checar conexão)
» Dúvida sobre Client/Server
» [Dúvida] - Configurar Client/Server UDP no Unity
» Adicionar uma camera apenas em um client [Multiplayer]
» Multiplayer Unet: no meio da partida os client saem do nada(sistema de Checar conexão)
» Dúvida sobre Client/Server
» [Dúvida] - Configurar Client/Server UDP no Unity
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos