[DB-RS] Jeux Socket - problème de camera

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
benjimare
Messages : 4
Inscription : 25 Jan 2017 16:21

[DB-RS] Jeux Socket - problème de camera

Message par benjimare » 25 Jan 2017 16:35

Bonjour à tous,

Je ne suis pas dev de jeux... Mais je suis Frontend en web ! le code est ma passion.
Bref, je rencontre un problème dans mon petit jeu.

J'ai suivi un tutoriel pour créer un jeu sur unity 5, node.js et socketIO. Tout fonctionne correctement.
Mon perso spawn, il peut bouger, il peut tirer etc.. Mon seul problème est que quand je met une camera sur mon prefab player et qu'un autre joueur se connecte.. le deuxième joueur voit a travers la caméra du premier mais il bouge bien son personnage.. Je ne sais pas si c'est un phrase compréhensible mais voila je suis bloqué..

Est-il possible de faire un script qui donne une sorte ID au camera pour les lier au nouveau joueur ? merci :/

Ah oui et quand je lance le jeu en CTR+B et sur unity pour tester... et que je retourne dans ma scène tout en laissant le jeu tourner. Et que je vais chipoter dans les cameras de met joueurs au niveau des clear flags... et que je reviens sur mes deux session ca fonctionne, chaque personnage a sa propre camera ..

Y a-t-il moyen peut de refresh cette option ? de l'actualisé au lancement des sessions ? merci

Benjimare,

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Jeux Socket - problème de camera

Message par boubouk50 » 25 Jan 2017 17:07

Bonjour Benjimare,

Avant de te répondre correctement, plusieurs choses:
- Peux-tu te présenter dans la section adéquate pour qu'on en sache un peu plus sur toi, stp.
- Tu es ici dans la section code, pourtant tu ne transmets pas de code. S'il s'agit de problème de code, poste-le qu'on voit où ça pêche, sinon tu es dans la mauvaise section. (On se chargera de déplacer maintenant que le sujet est créé ici)
- Peux-tu également donner plus de précisions? un autre joueur se connecte. Comment? Réseau ou local? Quel asset utilises-tu pour le réseau? Tout ce qui pourra nous aiguiller sur ton problème.

Merci.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

benjimare
Messages : 4
Inscription : 25 Jan 2017 16:21

Re: Jeux Socket - problème de camera

Message par benjimare » 25 Jan 2017 17:25

Voilà ma présentation faites :) !

Pour l'instant j'ai créer un serveur js avec la technologie socketIO

Voici le script

Code : Tout sélectionner

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(3000);

// global variables for the server
var enemies = [];
var playerSpawnPoints = [];
var clients = [];

app.get('/', function(req, res) {
	res.send('hey you got back get "/"');
});

io.on('connection', function(socket) {
	
	var currentPlayer = {};
	currentPlayer.name = 'unknown';

	socket.on('player connect', function() {
		console.log(currentPlayer.name+' recv: player connect');
		for(var i =0; i<clients.length;i++) {
			var playerConnected = {
				name:clients[i].name,
				position:clients[i].position,
				rotation:clients[i].position,
				health:clients[i].health
			};
			// in your current game, we need to tell you about the other players.
			socket.emit('other player connected', playerConnected);
			console.log(currentPlayer.name+' emit: other player connected: '+JSON.stringify(playerConnected));
		}
	});

	socket.on('play', function(data) {
		console.log(currentPlayer.name+' recv: play: '+JSON.stringify(data));
		// if this is the first person to join the game init the enemies
		if(clients.length === 0) {
			numberOfEnemies = data.enemySpawnPoints.length;
			enemies = [];
			data.enemySpawnPoints.forEach(function(enemySpawnPoint) {
				var enemy = {
					name: guid(),
					position: enemySpawnPoint.position,
					rotation: enemySpawnPoint.rotation,
					health: 100
				};
				enemies.push(enemy);
			});
			playerSpawnPoints = [];
			data.playerSpawnPoints.forEach(function(_playerSpawnPoint) {
				var playerSpawnPoint = {
					position: _playerSpawnPoint.position,
					rotation: _playerSpawnPoint.rotation
				};
				playerSpawnPoints.push(playerSpawnPoint);
			});
		}

		var enemiesResponse = {
			enemies: enemies
		};
		// we always will send the enemies when the player joins
		console.log(currentPlayer.name+' emit: enemies: '+JSON.stringify(enemiesResponse));
		socket.emit('enemies', enemiesResponse);
		var randomSpawnPoint = playerSpawnPoints[Math.floor(Math.random() * playerSpawnPoints.length)];
		currentPlayer = {
			name:data.name,
			position: randomSpawnPoint.position,
			rotation: randomSpawnPoint.rotation,
			health: 100
		};
		clients.push(currentPlayer);
		// in your current game, tell you that you have joined
		console.log(currentPlayer.name+' emit: play: '+JSON.stringify(currentPlayer));
		socket.emit('play', currentPlayer);
		// in your current game, we need to tell the other players about you.
		socket.broadcast.emit('other player connected', currentPlayer);
	});

	socket.on('player move', function(data) {
		console.log('recv: move: '+JSON.stringify(data));
		currentPlayer.position = data.position;
		socket.broadcast.emit('player move', currentPlayer);
	});

	socket.on('player turn', function(data) {
		console.log('recv: turn: '+JSON.stringify(data));
		currentPlayer.rotation = data.rotation;
		socket.broadcast.emit('player turn', currentPlayer);
	});

	socket.on('player shoot', function() {
		console.log(currentPlayer.name+' recv: shoot');
		var data = {
			name: currentPlayer.name
		};
		console.log(currentPlayer.name+' bcst: shoot: '+JSON.stringify(data));
		socket.emit('player shoot', data);
		socket.broadcast.emit('player shoot', data);
	});

	socket.on('health', function(data) {
		console.log(currentPlayer.name+' recv: health: '+JSON.stringify(data));
		// only change the health once, we can do this by checking the originating player
		if(data.from === currentPlayer.name) {
			var indexDamaged = 0;
			if(!data.isEnemy) {
				clients = clients.map(function(client, index) {
					if(client.name === data.name) {
						indexDamaged = index;
						client.health -= data.healthChange;
					}
					return client;
				});
			} else {
				enemies = enemies.map(function(enemy, index) {
					if(enemy.name === data.name) {
						indexDamaged = index;
						enemy.health -= data.healthChange;
					}
					return enemy;
				});
			}

			var response = {
				name: (!data.isEnemy) ? clients[indexDamaged].name : enemies[indexDamaged].name,
				health: (!data.isEnemy) ? clients[indexDamaged].health : enemies[indexDamaged].health
			};
			console.log(currentPlayer.name+' bcst: health: '+JSON.stringify(response));
			socket.emit('health', response);
			socket.broadcast.emit('health', response);
		}
	});

	socket.on('disconnect', function() {
		console.log(currentPlayer.name+' recv: disconnect '+currentPlayer.name);
		socket.broadcast.emit('other player disconnected', currentPlayer);
		console.log(currentPlayer.name+' bcst: other player disconnected '+JSON.stringify(currentPlayer));
		for(var i=0; i<clients.length; i++) {
			if(clients[i].name === currentPlayer.name) {
				clients.splice(i,1);
			}
		}
	});

});

console.log('--- server is running ...');

function guid() {
	function s4() {
		return Math.floor((1+Math.random()) * 0x10000).toString(16).substring(1);
	}
	return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
}
Grâce a ce script je peux lancer un serveur local, que je control avec l'acces command windows.

Ma question c'est : Comment faire pour que chaque personne qui lance mon jeu et qui se connecte aient leur propre vue fps (derrière leur perso).

Mon problème : Dès que quelqu'un se connecte (en local) les deux voient a travers 1 camera... compliqué a expliquer...

:!: Sujet déplacé :!:
:!: Les balises code SVP :!:
Merci de lire la Netiquette.

Avatar de l’utilisateur
Kazzad
Messages : 50
Inscription : 17 Août 2016 19:51
Localisation : France
Contact :

Re: [DB-RS] Jeux Socket - problème de camera

Message par Kazzad » 29 Jan 2017 11:17

Bonjour,
en regardant très vite fais tout ça, je pense qu'il faut que tu ajoute un petit truc sur un script attaché a ton prefab de joueur, qui désactivera la caméra attaché a celui ci si ce n'est pas notre joueur.

Ça ressemblerait (de mémoire) a quelque chose comme ça:

Code : Tout sélectionner

if(!isMine){
this.getComponent("Camera").isEnabled = false;
}
(Normalement ça marche, mais je suis sur téléphone donc je peux pas tester)
Ne disons pas que ça fonctionne, disons que nous n'avons pas trouvé de dysfonctionnement.

Verrouillé

Revenir vers « (Js) Javascript »