- Home /
Question by
Yaga15 · May 07, 2020 at 06:23 AM ·
multiplayerplayermultiplayer-networkingsetactivepun
my multiplayer game second player not active
I use pun2.
my code : Player:
[PunRPC]
private void Start()
{
gameObject.SetActive(pw.IsMine);
canmax = 100;
manamax = 100;
manager = GameObject.Find("Manager").GetComponent<Manager>();
pc = GetComponent<multiplayerc>();
cam = Camera.main;
if (lockCursor)
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
yaw = transform.eulerAngles.y;
//pitch = cam.transform.localEulerAngles.x;
smoothYaw = yaw;
smoothPitch = pitch;
pw = GetComponent<PhotonView>();
if (pw.IsMine == true)
{
pw.RPC("SyncProfile", RpcTarget.All, Launcher.myProfile.username, Launcher.myProfile.level, Launcher.myProfile.xp);
gameObject.layer = 11;
ChangeLayerRecursively(mesh.transform, 11);
gameObject.tag = ("Player");
cantext = GameObject.Find("HUD/Health/Can").GetComponent<Text>();
manatext = GameObject.Find("HUD/Fuel/Mana").GetComponent<Text>();
ui_healthbar = GameObject.Find("HUD/Health/Bar").transform;
ui_manabar = GameObject.Find("HUD/Fuel/Bar").transform;
RefreshHealthBar();
ui_username = GameObject.Find("HUD/Username/Text").GetComponent<Text>();
ui_username.text = Launcher.myProfile.username;
playerUsername.text = Launcher.myProfile.username;
uzunsaldırı = false;
durmak = true;
dc = true;
hareket = false;
saldırı = false;
hızlıhareket = false;
anim = GetComponent<Animator>();
rd = GetComponent<Rigidbody>();
//GetComponent<Renderer>().material.color = Color.red;
//gmbar.GetComponent<Image>().color = new Color32(191, 255, 97, 100);
}
}
private void ChangeLayerRecursively(Transform p_trans, int p_layer)
{
p_trans.gameObject.layer = p_layer;
foreach (Transform t in p_trans) ChangeLayerRecursively(t, p_layer);
}
[PunRPC]
void Update()
{
if (!pw.IsMine) return;
if (pw.IsMine == true)
{
Multi_Update();
RefreshHealthBar();
}
}
void RefreshHealthBar()
{
float t_health_ratio = (float)can / (float)canmax;
ui_healthbar.localScale = Vector3.Lerp(ui_healthbar.localScale, new Vector3(t_health_ratio, 1, 1), Time.deltaTime * 8f);
float t_mana_ratio = (float)mana / (float)manamax;
ui_manabar.localScale = Vector3.Lerp(ui_manabar.localScale, new Vector3(t_mana_ratio, 1, 1), Time.deltaTime * 8f);
}
[PunRPC]
private void DoAttack()
{
Ray ray = cam.ScreenPointToRay(Input.mousePosition);
RaycastHit t_hit;
if (Physics.Raycast(ray, out t_hit, attackRange))
{
if (t_hit.collider.gameObject.layer == 11)
{
//give damage
t_hit.collider.transform.root.gameObject.GetPhotonView().RPC("TakeDamage", RpcTarget.All, attackDamage, PhotonNetwork.LocalPlayer.ActorNumber);
//check for kill
//if (t_hit.collider.transform.root.gameObject.GetComponent<Player>().CheckKill(loadout[currentIndex].damage))
//{
// manager.ChangeStat_S(PhotonNetwork.LocalPlayer.ActorNumber, 0, 1);
//}
//show hitmarker
attackRange = 1f;
}
}
}
public void TakeDamage(int p_damage, int p_actor)
{
if (pw.IsMine)
{
can -= p_damage;
//RefreshHealthBar();
if (can <= 0)
{
manager.Spawn();
manager.ChangeStat_S(PhotonNetwork.LocalPlayer.ActorNumber, 1, 1);
if (p_actor >= 0)
manager.ChangeStat_S(p_actor, 0, 1);
PhotonNetwork.Destroy(gameObject);
}
}
}
[PunRPC]
public void Multi_Update()
{
attackTimer += Time.deltaTime;
if (pc.dc == true)
{
if (Input.GetMouseButtonUp(0) && attackTimer >= attackCoolDown)
{
pc.dc = false;
attackTimer = 0f;
DoAttack();
}
}
yaw += speedH * Input.GetAxis("Mouse X");
pitch -= speedV * Input.GetAxis("Mouse Y");
transform.eulerAngles = new Vector3(pitch, yaw, 0.0f);
if (disabled)
{
return;
}
Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
Vector3 inputDir = new Vector3(input.x, 0, input.y).normalized;
Vector3 worldInputDir = transform.TransformDirection(inputDir);
float mX = Input.GetAxisRaw("Mouse X");
float mY = Input.GetAxisRaw("Mouse Y");
float mMag = Mathf.Sqrt(mX * mX + mY * mY);
if (mMag > 5)
{
mX = 0;
mY = 0;
}
yaw += mX * mouseSensitivity;
pitch -= mY * mouseSensitivity;
pitch = Mathf.Clamp(pitch, pitchMinMax.x, pitchMinMax.y);
smoothPitch = Mathf.SmoothDampAngle(smoothPitch, pitch, ref pitchSmoothV, rotationSmoothTime);
smoothYaw = Mathf.SmoothDampAngle(smoothYaw, yaw, ref yawSmoothV, rotationSmoothTime);
transform.eulerAngles = Vector3.up * smoothYaw;
if (mana >= 10)
{
if (Input.GetKeyDown(KeyCode.Alpha3))
{
Instantiate(sp3, spawnPos.position, spawnPos.rotation);
mana -= 10;
}
if (Input.GetKeyDown(KeyCode.Alpha4))
{
Instantiate(sp4, spawnPos.position, spawnPos.rotation);
mana -= 10;
}
if (Input.GetKeyDown(KeyCode.Alpha5))
{
Instantiate(sp5, spawnPos.position, spawnPos.rotation);
mana -= 10;
}
if (Input.GetKeyDown(KeyCode.Alpha6))
{
Instantiate(sp6, spawnPos.position, spawnPos.rotation);
mana -= 10;
}
if (Input.GetKeyDown(KeyCode.Alpha7))
{
Instantiate(sp7, spawnPos.position, spawnPos.rotation);
mana -= 10;
}
if (Input.GetKeyDown(KeyCode.Keypad3))
{
Instantiate(sp3, spawnPos.position, spawnPos.rotation);
mana -= 10;
}
if (Input.GetKeyDown(KeyCode.Keypad4))
{
Instantiate(sp4, spawnPos.position, spawnPos.rotation);
mana -= 10;
}
if (Input.GetKeyDown(KeyCode.Keypad5))
{
Instantiate(sp5, spawnPos.position, spawnPos.rotation);
mana -= 10;
}
if (Input.GetKeyDown(KeyCode.Keypad6))
{
Instantiate(sp6, spawnPos.position, spawnPos.rotation);
mana -= 10;
}
if (Input.GetKeyDown(KeyCode.Keypad7))
{
Instantiate(sp7, spawnPos.position, spawnPos.rotation);
mana -= 10;
}
}
if (zaman >= -10f)
{
durmak = true;
dc = true;
saldırı = false;
uzunsaldırı = false;
hareket = false;
hızlıhareket = false;
anim.SetBool("attack_long_001", false);
anim.SetBool("attack_short_001", false);
anim.SetBool("move_forward", false);
anim.SetBool("move_forward_fast", false);
anim.SetBool("idle_normal", true);
}
if (zaman <= 0)
{
zaman += 5f * Time.deltaTime;
}
if (zaman <= -25f)
{
zaman = -25f;
}
if (dc == true)
{
if (Input.GetMouseButtonDown(0))
{
print(1);
zaman -= 75f * Time.deltaTime * 100f * 4f;
saldırı = true;
uzunsaldırı = false;
hareket = false;
hızlıhareket = false;
durmak = false;
anim.SetBool("attack_long_001", false);
anim.SetBool("attack_short_001", true);
anim.SetBool("move_forward", false);
anim.SetBool("move_forward_fast", false);
anim.SetBool("idle_normal", false);
}
}
if (dc == true)
{
if (Input.GetMouseButtonDown(1))
{
print(2);
zaman -= 75f * Time.deltaTime * 100f * 4f;
saldırı = false;
uzunsaldırı = true;
hareket = false;
hızlıhareket = false;
durmak = false;
dc = false;
anim.SetBool("attack_short_001", false);
anim.SetBool("attack_long_001", true);
anim.SetBool("move_forward", false);
anim.SetBool("move_forward_fast", false);
anim.SetBool("idle_normal", false);
// Invoke("PlayAudioClip",1f);
}
}
//if (isgrounded == true){
if (Input.GetKey(KeyCode.Space))
{
transform.Translate(0, 5f * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.LeftControl))
{
transform.Translate(0, -5f * Time.deltaTime, 0);
}
if (durmak == true)
{
yorgunluk -= 5f * Time.deltaTime;
anim.SetBool("attack_long_001", false);
anim.SetBool("attack_short_001", false);
anim.SetBool("move_forward", false);
anim.SetBool("move_forward_fast", false);
anim.SetBool("idle_normal", true);
}
if (Input.GetKey(KeyCode.A))
{
//transform.Rotate (0, -2.5f, 0);
zaman -= 75f * Time.deltaTime * 4f;
anim.SetBool("attack_long_001", false);
anim.SetBool("move_forward", true);
anim.SetBool("idle_normal", false);
anim.SetBool("attack_short_001", false);
anim.SetBool("move_forward_fast", false);
uzunsaldırı = false;
saldırı = false;
hareket = true;
hızlıhareket = false;
durmak = false;
dc = false;
transform.Translate(-1 * Time.deltaTime * hiz, 0, 0);
print("at");
}
if (Input.GetKey(KeyCode.D))
{
//transform.Rotate (0, 2.5f, 0);
zaman -= 75f * Time.deltaTime * 4f;
anim.SetBool("move_forward", true);
anim.SetBool("attack_long_001", false);
anim.SetBool("idle_normal", false);
anim.SetBool("attack_short_001", false);
anim.SetBool("move_forward_fast", false);
uzunsaldırı = false;
saldırı = false;
hareket = true;
hızlıhareket = false;
durmak = false;
dc = false;
transform.Translate(1 * Time.deltaTime * hiz, 0, 0);
print("at");
}
if (Input.GetKey(KeyCode.W))
{
zaman -= 75f * Time.deltaTime * 4f;
anim.SetBool("move_forward", true);
anim.SetBool("attack_long_001", false);
anim.SetBool("idle_normal", false);
anim.SetBool("attack_short_001", false);
anim.SetBool("move_forward_fast", false);
uzunsaldırı = false;
saldırı = false;
hareket = true;
hızlıhareket = false;
durmak = false;
dc = false;
transform.Translate(0, 0, 1 * Time.deltaTime * hiz);
print("at");
}
if (Input.GetKey(KeyCode.S))
{
zaman -= 75f * Time.deltaTime * 4f;
anim.SetBool("move_forward", true);
anim.SetBool("attack_long_001", false);
anim.SetBool("idle_normal", false);
anim.SetBool("attack_short_001", false);
anim.SetBool("move_forward_fast", false);
uzunsaldırı = false;
saldırı = false;
hareket = true;
hızlıhareket = false;
durmak = false;
dc = false;
transform.Translate(0, 0, -1 * Time.deltaTime * hiz);
print("at");
}
if (Input.GetKey(KeyCode.RightArrow))
{
zaman -= 75f * Time.deltaTime * 4f;
//transform.Rotate(0, 2.5f, 0);
anim.SetBool("move_forward", true);
anim.SetBool("attack_long_001", false);
anim.SetBool("idle_normal", false);
anim.SetBool("attack_short_001", false);
anim.SetBool("move_forward_fast", false);
uzunsaldırı = false;
saldırı = false;
hareket = true;
hızlıhareket = false;
durmak = false;
dc = false;
transform.Translate(1 * Time.deltaTime * hiz, 0, 0);
print("at");
}
if (Input.GetKey(KeyCode.LeftArrow))
{
//transform.Rotate(0, -2.5f, 0);
zaman -= 75f * Time.deltaTime * 4f;
anim.SetBool("move_forward", true);
anim.SetBool("attack_long_001", false);
anim.SetBool("idle_normal", false);
anim.SetBool("attack_short_001", false);
anim.SetBool("move_forward_fast", false);
uzunsaldırı = false;
saldırı = false;
hareket = true;
hızlıhareket = false;
durmak = false;
dc = false;
transform.Translate(-1 * Time.deltaTime * hiz, 0, 0);
print("at");
}
if (Input.GetKey(KeyCode.UpArrow))
{
zaman -= 75f * Time.deltaTime * 4f;
anim.SetBool("move_forward", true);
anim.SetBool("attack_long_001", false);
anim.SetBool("idle_normal", false);
anim.SetBool("attack_short_001", false);
anim.SetBool("move_forward_fast", false);
uzunsaldırı = false;
saldırı = false;
hareket = true;
hızlıhareket = false;
durmak = false;
dc = false;
transform.Translate(0, 0, 1 * Time.deltaTime * hiz);
print("at");
}
if (Input.GetKey(KeyCode.DownArrow))
{
zaman -= 75f * Time.deltaTime * 4f;
anim.SetBool("move_forward", true);
anim.SetBool("attack_long_001", false);
anim.SetBool("idle_normal", false);
anim.SetBool("attack_short_001", false);
anim.SetBool("move_forward_fast", false);
uzunsaldırı = false;
saldırı = false;
hareket = true;
hızlıhareket = false;
durmak = false;
dc = false;
transform.Translate(0, 0, -1 * Time.deltaTime * hiz);
print("at");
}
if (yorgunluk <= 0)
{
yorgunluk = 0;
}
if (yorgunluk >= 0)
{
yorgunluk -= 2.5f * Time.deltaTime;
}
if (Input.GetKey(KeyCode.LeftShift))
{
zaman -= 75f * Time.deltaTime * 4f;
uzunsaldırı = false;
saldırı = false;
hareket = false;
hızlıhareket = true;
durmak = false;
dc = false;
anim.SetBool("move_forward_fast", true);
anim.SetBool("attack_long_001", false);
anim.SetBool("move_forward", false);
anim.SetBool("idle_normal", false);
anim.SetBool("attack_short_001", false);
yorgunluk += 10f * Time.deltaTime;
hiz = 10f;
}
else
{
hiz = 7.5f;
}
if (yorgunluk >= 100)
{
yorgunluk = 100;
hiz = 7.5f;
if (hızlıhareket == true)
{
if (hareket == true)
{
anim.SetBool("move_forward_fast", false);
anim.SetBool("move_forward", true);
}
}
}
//aclik -= 0.67f * Time.deltaTime;
if (can >= 100)
{
can = 100;
}
if (can <= 0)
{
//Respawn();
//can -= Time.deltaTime * 5;
}
if (can > 0 && can <= 50)
{
can += Time.deltaTime * 1.1f;
}
if (can > 0 && can <= 100)
{
can += Time.deltaTime * 0.75f;
}
if (mana <= 50)
{
mana += Time.deltaTime * 1.1f;
}
if (mana <= 0)
{
mana = 0;
}
if (mana <= 100)
{
mana += Time.deltaTime * 0.75f;
}
cantext.text = "Health: " + can.ToString("f0");
manatext.text = "Mana: " + mana.ToString("f0");
}
[PunRPC]
private void SyncProfile(string p_username, int p_level, int p_xp)
{
playerProfile = new ProfileData(p_username, p_level, p_xp);
playerUsername.text = playerProfile.username;
}
}
} Manager: [SerializeField] public class PlayerInfo {
public ProfileData profile;
public int actor;
public short kills;
public short deaths;
public PlayerInfo (ProfileData p, int a, short k, short d)
{
this.profile = p;
this.actor = a;
this.kills = k;
this.deaths = d;
}
}
public enum GameState
{
Waiting = 0,
Starting = 1,
Playing = 2,
Ending = 3
}
public class Manager : MonoBehaviourPunCallbacks, IOnEventCallback
{
#region Fields
public int mainmenu = 0;
public int killcount = 3;
public bool perpetual = false;
public GameObject mapcam;
public string player_prefab_string;
public GameObject player_prefab;
public Transform[] spawn_points;
public List<PlayerInfo> playerInfo = new List<PlayerInfo>();
public int myind;
private Text ui_mykills;
private Text ui_mydeaths;
private Transform ui_leaderboard;
private Transform ui_endgame;
private GameState state = GameState.Waiting;
#endregion
#region Codes
public enum EventCodes : byte
{
NewPlayer,
UpdatePlayers,
ChangeStat,
NewMatch
}
#endregion
#region MB Callbacks
[SerializeField]
private Karakter_multi km;
private Scene sc;
private GameObject seçili;
private void Start()
{
//km = GetComponent<Karakter_multi>();
//km = FindObjectOfType<Karakter_multi>();
sc = SceneManager.GetSceneByName("Multi_Select");
km = GameObject.FindObjectOfType<Karakter_multi>();
//km = GameObject.FindGameObjectWithTag("Deneme").GetComponent<Karakter_multi>();
player_prefab_string = km.isim;
player_prefab = km.seçili;
mapcam.SetActive(false);
ValidateConnection();
InitializeUI();
NewPlayer_S(Launcher.myProfile);
Spawn();
}
private void Update()
{
if (state == GameState.Ending)
{
return;
}
if (Input.GetKeyDown(KeyCode.Tab))
{
if (ui_leaderboard.gameObject.activeSelf) ui_leaderboard.gameObject.SetActive(false);
else Leaderboard(ui_leaderboard);
}
}
private void OnEnable()
{
PhotonNetwork.AddCallbackTarget(this);
}
private void OnDisable()
{
PhotonNetwork.RemoveCallbackTarget(this);
}
#endregion
#region Photon
public void OnEvent (EventData photonEvent)
{
if (photonEvent.Code >= 200) return;
EventCodes e = (EventCodes) photonEvent.Code;
object[] o = (object[]) photonEvent.CustomData;
switch (e)
{
case EventCodes.NewPlayer:
NewPlayer_R(o);
break;
case EventCodes.UpdatePlayers:
UpdatePlayers_R(o);
break;
case EventCodes.ChangeStat:
ChangeStat_R(o);
break;
case EventCodes.NewMatch:
NewMatch_R();
break;
}
}
public override void OnLeftRoom ()
{
base.OnLeftRoom();
SceneManager.LoadScene(mainmenu);
}
#endregion
#region Methods
public void Spawn ()
{
Transform t_spawn = spawn_points[Random.Range(0, spawn_points.Length)];
if (PhotonNetwork.IsConnected)
{
PhotonNetwork.Instantiate(player_prefab_string, t_spawn.position, t_spawn.rotation);
}
else
{
Debug.Log("WORKING");
GameObject newPlayer = Instantiate(player_prefab, t_spawn.position, t_spawn.rotation) as GameObject;
}
}
private void InitializeUI ()
{
ui_mykills = GameObject.Find("HUD/Stats/Kills/Text").GetComponent<Text>();
ui_mydeaths = GameObject.Find("HUD/Stats/Deaths/Text").GetComponent<Text>();
ui_leaderboard = GameObject.Find("HUD").transform.Find("Leaderboard").transform;
ui_endgame = GameObject.Find("Canvas").transform.Find("End Game").transform;
RefreshMyStats();
}
private void RefreshMyStats ()
{
if (playerInfo.Count > myind)
{
ui_mykills.text = $"{playerInfo[myind].kills} kills";
ui_mydeaths.text = $"{playerInfo[myind].deaths} deaths";
}
else
{
ui_mykills.text = "0 kills";
ui_mydeaths.text = "0 deaths";
}
}
private void Leaderboard (Transform p_lb)
{
// clean up
for (int i = 2; i < p_lb.childCount; i++)
{
Destroy(p_lb.GetChild(i).gameObject);
}
// set details
p_lb.Find("Header/Mode").GetComponent<Text>().text = "FREE FOR ALL";
p_lb.Find("Header/Map").GetComponent<Text>().text = "Battlefield";
// cache prefab
GameObject playercard = p_lb.GetChild(1).gameObject;
playercard.SetActive(false);
// sort
List<PlayerInfo> sorted = SortPlayers(playerInfo);
// display
bool t_alternateColors = false;
foreach (PlayerInfo a in sorted)
{
GameObject newcard = Instantiate(playercard, p_lb) as GameObject;
if (t_alternateColors) newcard.GetComponent<Image>().color = new Color32(0, 0, 0, 180);
t_alternateColors = !t_alternateColors;
newcard.transform.Find("Level").GetComponent<Text>().text = a.profile.level.ToString("00");
newcard.transform.Find("Username").GetComponent<Text>().text = a.profile.username;
newcard.transform.Find("Score Value").GetComponent<Text>().text = (a.kills * 100).ToString();
newcard.transform.Find("Kills Value").GetComponent<Text>().text = a.kills.ToString();
newcard.transform.Find("Deaths Value").GetComponent<Text>().text = a.deaths.ToString();
newcard.SetActive(true);
}
// activate
p_lb.gameObject.SetActive(true);
}
private List<PlayerInfo> SortPlayers (List<PlayerInfo> p_info)
{
List<PlayerInfo> sorted = new List<PlayerInfo>();
while (sorted.Count < p_info.Count)
{
// set defaults
short highest = -1;
PlayerInfo selection = p_info[0];
// grab next highest player
foreach (PlayerInfo a in p_info)
{
if (sorted.Contains(a)) continue;
if (a.kills > highest)
{
selection = a;
highest = a.kills;
}
}
// add player
sorted.Add(selection);
}
return sorted;
}
private void ValidateConnection ()
{
if (PhotonNetwork.IsConnected) return;
SceneManager.LoadScene(mainmenu);
}
private void StateCheck ()
{
if (state == GameState.Ending)
{
EndGame();
}
}
private void ScoreCheck ()
{
// define temporary variables
bool detectwin = false;
// check to see if any player has met the win conditions
foreach (PlayerInfo a in playerInfo)
{
// free for all
if(a.kills >= killcount)
{
detectwin = true;
break;
}
}
// did we find a winner?
if (detectwin)
{
// are we the master client? is the game still going?
if (PhotonNetwork.IsMasterClient && state != GameState.Ending)
{
// if so, tell the other players that a winner has been detected
UpdatePlayers_S((int)GameState.Ending, playerInfo);
}
}
}
private void EndGame()
{
// set game state to ending
state = GameState.Ending;
// disable room
if (PhotonNetwork.IsMasterClient)
{
PhotonNetwork.DestroyAll();
if (!perpetual)
{
PhotonNetwork.CurrentRoom.IsVisible = false;
PhotonNetwork.CurrentRoom.IsOpen = false;
}
}
// activate map camera
mapcam.SetActive(true);
// show end game ui
ui_endgame.gameObject.SetActive(true);
Leaderboard(ui_endgame.Find("Leaderboard"));
// wait X seconds and then return to main menu
StartCoroutine(End(6f));
}
#endregion
#region Events
public void NewPlayer_S (ProfileData p)
{
object[] package = new object[6];
package[0] = p.username;
package[1] = p.level;
package[2] = p.xp;
package[3] = PhotonNetwork.LocalPlayer.ActorNumber;
package[4] = (short) 0;
package[5] = (short) 0;
PhotonNetwork.RaiseEvent(
(byte)EventCodes.NewPlayer,
package,
new RaiseEventOptions { Receivers = ReceiverGroup.MasterClient },
new SendOptions { Reliability = true }
);
}
public void NewPlayer_R (object[] data)
{
PlayerInfo p = new PlayerInfo(
new ProfileData(
(string) data[0],
(int) data[1],
(int) data[2]
),
(int) data[3],
(short) data[4],
(short) data[5]
);
playerInfo.Add(p);
UpdatePlayers_S((int)state, playerInfo);
}
public void UpdatePlayers_S (int state, List<PlayerInfo> info)
{
object[] package = new object[info.Count + 1];
package[0] = state;
for (int i = 0; i < info.Count; i++)
{
object[] piece = new object[6];
piece[0] = info[i].profile.username;
piece[1] = info[i].profile.level;
piece[2] = info[i].profile.xp;
piece[3] = info[i].actor;
piece[4] = info[i].kills;
piece[5] = info[i].deaths;
package[i + 1] = piece;
}
PhotonNetwork.RaiseEvent (
(byte)EventCodes.UpdatePlayers,
package,
new RaiseEventOptions { Receivers = ReceiverGroup.All },
new SendOptions { Reliability = true }
);
}
public void UpdatePlayers_R (object[] data)
{
state = (GameState)data[0];
playerInfo = new List<PlayerInfo>();
for (int i = 1; i < data.Length; i++)
{
object[] extract = (object[]) data[i];
PlayerInfo p = new PlayerInfo (
new ProfileData (
(string) extract[0],
(int) extract[1],
(int) extract[2]
),
(int) extract[3],
(short) extract[4],
(short) extract[5]
);
playerInfo.Add(p);
if (PhotonNetwork.LocalPlayer.ActorNumber == p.actor) myind = i - 1;
}
StateCheck();
}
public void ChangeStat_S (int actor, byte stat, byte amt)
{
object[] package = new object[] { actor, stat, amt };
PhotonNetwork.RaiseEvent(
(byte)EventCodes.ChangeStat,
package,
new RaiseEventOptions { Receivers = ReceiverGroup.All },
new SendOptions { Reliability = true }
);
}
public void ChangeStat_R (object[] data)
{
int actor = (int) data[0];
byte stat = (byte) data[1];
byte amt = (byte) data[2];
for (int i = 0; i < playerInfo.Count; i++)
{
if(playerInfo[i].actor == actor)
{
switch(stat)
{
case 0: //kills
playerInfo[i].kills += amt;
Debug.Log($"Player {playerInfo[i].profile.username} : kills = {playerInfo[i].kills}");
break;
case 1: //deaths
playerInfo[i].deaths += amt;
Debug.Log($"Player {playerInfo[i].profile.username} : deaths = {playerInfo[i].deaths}");
break;
}
if(i == myind) RefreshMyStats();
if (ui_leaderboard.gameObject.activeSelf) Leaderboard(ui_leaderboard);
break;
}
}
ScoreCheck();
}
public void NewMatch_S ()
{
PhotonNetwork.RaiseEvent(
(byte)EventCodes.NewMatch,
null,
new RaiseEventOptions { Receivers = ReceiverGroup.All },
new SendOptions { Reliability = true }
);
}
public void NewMatch_R ()
{
// set game state to waiting
state = GameState.Waiting;
// deactivate map camera
mapcam.SetActive(false);
// hide end game ui
ui_endgame.gameObject.SetActive(false);
// reset scores
foreach (PlayerInfo p in playerInfo)
{
p.kills = 0;
p.deaths = 0;
}
// reset ui
RefreshMyStats();
// spawn
Spawn();
}
#endregion
#region Coroutines
private IEnumerator End (float p_wait)
{
yield return new WaitForSeconds(p_wait);
if(perpetual)
{
// new match
if(PhotonNetwork.IsMasterClient)
{
NewMatch_S();
}
}
else
{
// disconnect
PhotonNetwork.AutomaticallySyncScene = false;
PhotonNetwork.LeaveRoom();
}
}
#endregion
}
}
Character Select: public class Karakter_multi : MonoBehaviourPunCallbacks {
public GameObject cn;
public string isim;
public string arcane;
public string ıce;
public string flame;
public string elec;
public string posion;
public string divine;
public GameObject seçili;
public GameObject[] Wizards;
public GameObject[] WizardsObj;
public int wizsayi;
// Start is called before the first frame update
void Start()
{
WizardsObj[0].SetActive(true);
WizardsObj[1].SetActive(true);
WizardsObj[2].SetActive(true);
WizardsObj[3].SetActive(true);
WizardsObj[4].SetActive(true);
WizardsObj[5].SetActive(true);
seçili = WizardsObj[wizsayi];
for (int i = 0; i < Wizards.Length; i++)
{
Wizards[i].SetActive(false);
}
Wizards[wizsayi].SetActive(true);
}
void Update()
{
DontDestroyOnLoad(cn);
seçili = WizardsObj[wizsayi];
}
public void NextButton()
{
wizsayi++;
Wizards[wizsayi - 1].SetActive(false);
if (wizsayi > Wizards.Length - 1)
{
wizsayi = 0;
}
Wizards[wizsayi].SetActive(true);
}
public void PreButton()
{
wizsayi--;
Wizards[wizsayi + 1].SetActive(false);
if (wizsayi < 0)
{
wizsayi = 5;
}
if (wizsayi < 0)
{
Wizards[5].SetActive(true);
}
Wizards[wizsayi].SetActive(true);
}
public void ArcaneWizard()
{
//cn.SetActive(false);
isim = arcane;
seçili = WizardsObj[0];
SceneManager.LoadScene("Menu");
}
public void ElecWizard()
{
//cn.SetActive(false);
isim = elec;
seçili = WizardsObj[4];
SceneManager.LoadScene("Menu");
}
public void DivineWizard()
{
//cn.SetActive(false);
isim = divine;
seçili = WizardsObj[5];
SceneManager.LoadScene("Menu");
}
public void PosionWizard()
{
//cn.SetActive(false);
isim = posion;
seçili = WizardsObj[3];
SceneManager.LoadScene("Menu");
}
public void FlameWizard()
{
//cn.SetActive(false);
isim = flame;
seçili = WizardsObj[2];
SceneManager.LoadScene("Menu");
}
public void İceWizard()
{
//cn.SetActive(false);
isim = ıce;
seçili = WizardsObj[1];
SceneManager.LoadScene("Menu");
}
}
}
belirti.png
(17.3 kB)
Comment
Your answer
Follow this Question
Related Questions
mutiplayer player clone not active 0 Answers
Photon RPC is not working in photon? 2 Answers
Callback for DNS entry error using Photon Networking 0 Answers