• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
Question by TheGeorg · Apr 28, 2019 at 11:21 AM · c#multiplayerphotondamagehealth

My Photon health script doesnt work

I am using photon for my game and I have one player gameobject but i does not work

here my script: using UnityEngine; using System.Collections; using UnityEngine.UI;

public class Combat : Photon.MonoBehaviour { public float Health = 100; private float MinHealth = 0; private float MaxHealth = 100;

 public Slider slider;

 public virtual void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
 {
     if (stream.isWriting)
     {
         stream.SendNext(Health);
     } else if (stream.isReading)
     {
         Health = (float)stream.ReceiveNext();
     }
 }
 private void Update()
 {
     slider.value = Health;
 }
 [PunRPC]
 void Damage()
 {
     Health -= 10;
 }

} and in another script when i call the function: photonView.RPC("Damage", PhotonTargets.All, coll.gameObject); coll means collider it's the overlapping player.

Comment

People who like this

0 Show 0
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

2 Replies

· Add your reply
  • Sort: 
avatar image
Best Answer

Answer by Captain_Pineapple · Apr 28, 2019 at 01:31 PM

Hey there and welcome to the forum,

your problem is most likely that when you call photonView.RPC("Damage", PhotonTargets.All, coll.gameObject); you pass an argument to Damage which you did not define in your function. Leave the coll.gameObject out there or add an gameobject parameter to your Damage function.

Secondly always avoid sending redundant data. This means that you should only update the health value when it actually changes. (Like you do by using the damage rpc - this is good) By adding the health value to your stream you only add 4 byte of unnecessary data that is sent 10 times per second to each player in your room.

If something was not clear or you need more help on this let me know and i'll try to explain it a bit more detailed.

Comment

People who like this

0 Show 3 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image TheGeorg · Apr 28, 2019 at 01:36 PM 0
Share

ok at first thank you for your answer but how can I then send it specific to the collided player

avatar image TheGeorg · Apr 28, 2019 at 06:10 PM 0
Share

Pls answer

avatar image Captain_Pineapple TheGeorg · Apr 28, 2019 at 09:45 PM 0
Share

I look into this forum once or twice a day, begging for an answer won't speed this up ;)

avatar image

Answer by TheGeorg · Apr 28, 2019 at 06:28 PM

Ok it still dont works I send you both of my scripts:

Combat script: using UnityEngine; using System.Collections; using UnityEngine.UI; using Photon;

public class Combat : Photon.PunBehaviour { public float Health = 100; private float MinHealth = 0; private float MaxHealth = 100;

 public Slider slider;

 public virtual void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
 {
     if (stream.isWriting)
     {
         stream.SendNext(Health);
     } else if (stream.isReading)
     {
         Health = (float)stream.ReceiveNext();
     }
 }
 [PunRPC]
 void Damage(GameObject WhichPlayer)
 {
     Health -= 10;
     slider.value = Health;
 }

}

WhichCollider script: using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon;

public class WhichCollider : PunBehaviour { public GameObject player; public Collider2D coll;

 private bool CanHit;
 private bool CanHit2;
 

 private void OnTriggerEnter2D(Collider2D collision)
 {
     coll = collision;
     CanHit = true;
 }
 private void OnTriggerExit2D(Collider2D collision)
 {
     CanHit = false;
 }
 private void Update()
 {
     if (CanHit == true)
     {
         if (player.GetComponent<AnimController>().Flipped == true)
         {
             if (gameObject.name == "Collider1")
             {
                 if (player.GetComponent<AnimController>().WaitForHit == true)
                 {
                     if (coll.gameObject.CompareTag("Player"))
                     {
                         if (CanHit2 == false)
                         {
                             CanHit2 = true;
                             print("Links");
                             StartCoroutine(SetCanHit());
                         }
                     }
                 }
             }
         }
         if (player.GetComponent<AnimController>().Flipped == false)
         {
             if (gameObject.name == "Collider2")
             {
                 if (player.GetComponent<AnimController>().WaitForHit == true)
                 {
                     if (coll.gameObject.CompareTag("Player"))
                     {
                         if (CanHit2 == false)
                         {
                             CanHit2 = true;
                             print("Rechts");
                             StartCoroutine(SetCanHit());
                         }
                     }
                 }
             }
         }
     }
 }
 IEnumerator SetCanHit()
 {
     yield return new WaitForSeconds(0.3f);
     photonView.RPC("Damage", PhotonTargets.Others);
     CanHit2 = false;
 }

}

Comment

People who like this

0 Show 3 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Captain_Pineapple · Apr 28, 2019 at 10:00 PM 0
Share

Ok well first of all remove the photon stream. you probably wont need this.

I adjusted your script for you. Please try to understand the code and do not blindly copypaste it.

 public class Combat : Photon.PunBehaviour { 
     public float Health = 100; 
     private float MinHealth = 0; 
     private float MaxHealth = 100;
 
     public Slider slider;
     
     public virtual void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
     {
         // only add variables here that basically change every frame, like positions and rotations ( mostly already handled by networktransform)
         if (stream.isWriting)
         {
         } else if (stream.isReading)
         {
         }
     }
     
     /// <summary>
     /// use this function to access this script and deal damage to this player or object
     /// make sure that this script is on your main player character.
     /// </summary>
     public void damagePlayer(float value)
     {
         Health -= value;
         slider.value = Health;
         photonView.RPC("syncHealth", PhotonTargets.Others, value);
     }
     
     /// <summary>
     /// this is used when you have called the damagePlayerfunction. This should sync the values over all instances.
     /// </summary>
     [PunRPC]
     void syncDamage(float damage)
     {
         Health -= damage;
         slider.value = Health;
     }
 }

This way when you want to damage an object or player that has a photon view and the combat script you can simply call the damagePlayer function and it should do the rest. it will apply the new value locally and call the rpc to set the new health value for everyone else.

Falls dir das in englisch zu schwierig ist sag bescheid, dann bekommste das nochmal übersetzt.

avatar image TheGeorg Captain_Pineapple · Apr 29, 2019 at 01:20 PM 0
Share

Ok at first thank you verrrryyy much now it works but only on the device which applies the damage so the health variable is on the other device still 100. I got this error: PhotonView with ID 2001 has no method "syncHealth" marked with the [PunRPC](C#) or @PunRPC(JS) property! Args: Single UnityEngine.Debug:LogError(Object)

but its marked with the PunRPC

avatar image TheGeorg TheGeorg · Apr 29, 2019 at 01:41 PM 0
Share

ok found the error

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

644 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Photon Combat script does not work 0 Answers

Multiplayer cant see host player C# 0 Answers

Photon Network Get all the connected players. 0 Answers

Decrase value on collision C# 2 Answers

Photon - sending variable between clients 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges