J'étais venu pour un soucis en février (sur un sujet de téléportation d'un joueur) et on avait parlait rapidement de l'anti triche de déplacement et depuis je n'ai toujours pas la réponse. Je pensais en cherchant seul pouvoir trouver avec du temps mais malheureusement je n'y arrive toujours pas et à vrais dire sur la docs unity il y à même un script dont je n'arrive pas du tout à saisir ... La fonction clientMoveCallback3D (qui ce trouve ici)
Déjà la class est un NetworkManager, pas de soucis, je l'utilisais déjà directement en tant que script pour plusieurs avantages.
Mais le moment où vraiment mon serveur fait un crash et reboot a l'infini c'est la partie "OnStartServer", je ne comprend pas ce que fait un NetworkTransform dans un NetworkManager.
Le résultat qui ce produit c'est l'obligation d'ajouter un NetworkIdentity et ... Bah si on est ni serveur, ni client l'objet contenant le NetworkIdentity n'existe simplement pas.
J'aimerais donc comprendre ce que je n'ai pas du tout compris au niveau des serveurs car malheureusement j'ai trouver beaucoup de choses similaire mais je n'ai jamais réussis à comprendre le script.
Donc il y à un soucis qui doit être tout bête dont je dois forcément savoir (ou du moins déduire ce qu'il faut faire) mais vraiment rien me viens Peut être ma façon de lancer le serveur qui est pas bonne? Je n'ai trouver aucun script d'exemple, que du c/c ou des exemples pratiquement identique à l'exemple de la doc.
Je vous remercie pour votre lecture !
Cordialement
Edit:
Bon ... Je viens de remarquer que ceci marche complètement mais pas le script de la doc dont je n'ai toujours pas compris:
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class Move : NetworkTransform {
public int cheatCount = 0;
public void Start() {
GetComponent<NetworkTransform>().clientMoveCallback3D = ValidateMove;
}
public bool ValidateMove(ref Vector3 position, ref Vector3 velocity, ref Quaternion rotation) {
Debug.Log("pos:" + position);
if (position.y > 9) {
position.y = 9;
cheatCount += 1;
if (cheatCount == 10) {
Invoke("DisconnectCheater", 0.1f);
}
}
return true;
}
void DisconnectCheater() {
GetComponent<NetworkIdentity>().connectionToClient.Disconnect();
}
}
Edit N°2:
Je viens de faire des tests, en faite le ValidateMove ne FONCTIONNE PAS en localhost !
J'ai mis mon IP et mon port et ça marche ! Et garder l'update de base sinon ça désactive tout