Movimentação para todas as direções em um jogo multiplayer online
Página 1 de 1
Movimentação para todas as direções em um jogo multiplayer online
Olá, estou fazendo um jogo multiplayer online para celular através de tutoriais no youtube, só que a minha duvida é na comunicação do jogo com o servidor na parte de movimentação. copiei os script do tutorial no youtube de movimentação , mas está com a movimentação para 4 direções, eu consegui fazer com que controlasse por um joystick, mas não estou conseguindo fazer com que ele ande em todas as direções possíveis, alguém pode me ajudar?
esse é o script do jogo, que manda a mensagem para o servidor indicando quando movimento o joystick.
E esse é o script que fica no servidor com o código de movimentação, que desejo colocar para se movimentar em todas as direções.
No meu jogo antigo eu usava esse script de movimentação, gostaria que ficasse com essa movimentação.
esse é o script do jogo, que manda a mensagem para o servidor indicando quando movimento o joystick.
- Código:
using RiptideNetworking;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
[SerializeField] private Transform camTransform;
public MSJoystickController moveJoystic;
private bool[] inputs;
private void Start()
{
inputs = new bool[6];
}
private void Update()
{
if(moveJoystic.joystick.joystickX > 0)
inputs[0] = true;
if (moveJoystic.joystick.joystickX < 0)
inputs[1] = true;
if (moveJoystic.joystick.joystickY > 0)
inputs[2] = true;
if (moveJoystic.joystick.joystickY < 0)
inputs[3] = true;
}
private void FixedUpdate()
{
SendInput();
for (int i = 0; i < inputs.Length; i++)
inputs[i] = false;
}
#region Messages
private void SendInput()
{
Message message = Message.Create(MessageSendMode.reliable, ClientToServerId.input);
message.AddBools(inputs, false);
message.AddVector3(camTransform.forward);
NetworkManager.Singleton.Client.Send(message);
}
#endregion
}
E esse é o script que fica no servidor com o código de movimentação, que desejo colocar para se movimentar em todas as direções.
- Código:
using RiptideNetworking;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(CharacterController))]
public class PlayerMovement : MonoBehaviour
{
[SerializeField] private Player player;
[SerializeField] private CharacterController controller;
[SerializeField] private Transform camProxy;
[SerializeField] private float gravity;
[SerializeField] private float movementSpeed;
[SerializeField] private float jumpHeight;
private float gravityAcceleration;
private float moveSpeed;
private float jumpSpeed;
private bool[] inputs;
private float yVelocity;
private bool didTeleport;
public MSJoystickController moveJoystic;
private void OnValidate()
{
if (controller == null)
controller = GetComponent<CharacterController>();
if (player == null)
player = GetComponent<Player>();
Initialize();
}
private void Start()
{
Initialize();
inputs = new bool[6];
}
private void FixedUpdate()
{
Vector2 inputDirection = Vector2.zero;
if (inputs[0])
inputDirection.x += 1;
if (inputs[1])
inputDirection.x -= 1;
if (inputs[2])
inputDirection.y += 1;
if (inputs[3])
inputDirection.y -= 1;
Move(inputDirection, inputs[4], inputs[5]);
}
private void Initialize()
{
gravityAcceleration = gravity * Time.fixedDeltaTime * Time.fixedDeltaTime;
moveSpeed = movementSpeed * Time.fixedDeltaTime;
jumpSpeed = Mathf.Sqrt(jumpHeight * -2f * gravityAcceleration);
}
private void Move(Vector3 inputDirection, bool jump, bool sprint)
{
Vector3 moveDirection = Vector3.Normalize(camProxy.right * inputDirection.x + Vector3.Normalize(FlattenVector3(camProxy.forward)) * inputDirection.y);
moveDirection *= moveSpeed;
if (sprint)
moveDirection *= 2f;
if (controller.isGrounded)
{
yVelocity = 0f;
if (jump)
yVelocity = jumpSpeed;
}
yVelocity += gravityAcceleration;
moveDirection.y = yVelocity;
controller.Move(moveDirection);
SendMovement();
}
private Vector3 FlattenVector3(Vector3 vector)
{
vector.y = 0;
return vector;
}
public void SetInput(bool[] inputs, Vector3 forward)
{
this.inputs = inputs;
camProxy.forward = forward;
}
public void Teleport(Vector3 toPosition)
{
bool isEnabled = controller.enabled;
controller.enabled = false;
transform.position = toPosition;
controller.enabled = isEnabled;
didTeleport = true;
}
private void SendMovement()
{
if (NetworkManager.Singleton.CurrentTick % 2 != 0)
return;
Message message = Message.Create(MessageSendMode.unreliable, ServerToClientId.playerMovement);
message.AddUShort(player.Id);
message.AddUShort(NetworkManager.Singleton.CurrentTick);
message.AddBool(didTeleport);
message.AddVector3(transform.position);
message.AddVector3(camProxy.forward);
NetworkManager.Singleton.Server.SendToAll(message);
didTeleport = false;
}
}
No meu jogo antigo eu usava esse script de movimentação, gostaria que ficasse com essa movimentação.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovimetJoystic : MonoBehaviour
{
public MSJoystickController moveJoystic;
private Animator Animacao;
private Rigidbody rb;
private float moveH,moveV;
public float SpeedMove = 8;
bool AndarDisponivel=true;
public float TempoDelayAndar = 0.5f;
void Start()
{
rb = GetComponent<Rigidbody>();
Animacao = GetComponent<Animator>();
}
void Update()
{
movePlayer();
animationPlayer();
}
void movePlayer(){
if (AndarDisponivel){
moveH = moveJoystic.joystick.joystickX;
moveV = moveJoystic.joystick.joystickY;
Vector3 dir = new Vector3(moveH,0, moveV);
rb.velocity = new Vector3(moveH*SpeedMove, rb.velocity.y, moveV*SpeedMove);
if(dir != Vector3.zero){
transform.LookAt(transform.position + dir);
}
}
else if(!AndarDisponivel){
StartCoroutine("DelayAndar");
}
}
void animationPlayer(){
Animacao.SetFloat("HorizontalMove",moveH);
Animacao.SetFloat("VerticalMove",moveV);
}
public void Atacando(){
AndarDisponivel=false;
}
IEnumerator DelayAndar(){
yield return new WaitForSeconds(TempoDelayAndar);
AndarDisponivel=true;
}
}
kessisdiones- Membro
- PONTOS : 1227
REPUTAÇÃO : 6
Respeito as regras :
Tópicos semelhantes
» Beat 'Em UP com movimentação em todas as direções.
» Procuro equipe para criar jogo multiplayer online de sobrevivência.
» JOGO DE SOBREVIVENCIA MULTIPLAYER ONLINE..
» TESTAR JOGO MULTIPLAYER ONLINE
» JOGO Survival Multiplayer Online
» Procuro equipe para criar jogo multiplayer online de sobrevivência.
» JOGO DE SOBREVIVENCIA MULTIPLAYER ONLINE..
» TESTAR JOGO MULTIPLAYER ONLINE
» JOGO Survival Multiplayer Online
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos