Search Unity

Change Mesh over all Clients - UNet

Discussion in 'UNet' started by path14, May 23, 2017.

  1. path14

    path14

    Joined:
    Apr 9, 2017
    Posts:
    113
    Hey all! I've come for your knowledge once more!

    When my player-prefab right clicks on an inventoryslot-prefab (if it contains equipment), it will equip it by a changing the sharedMesh in the SkinnedMeshRenderer component. This all works great, but it does not show the change in the client, nor can the client equip the armor onto itself, but instead changes the armor for the server-client.

    I feel like this should be quite simple, but I haven't gotten it to work, nor really understand what needs to be done in this situation. (This multiplayer ordeal has been quite discouraging so far)

    I've read the documentation, experimented with Command, ClientRpc, SyncVar, etc, but nothing has worked in the last 12 hrs...

    If anyone could lead me in the right direction I'll be eternally grateful. :)
     
  2. Deleted User

    Deleted User

    Guest

    Can you post how your code looks atm?
     
  3. path14

    path14

    Joined:
    Apr 9, 2017
    Posts:
    113
    As long as you don't judge :p

    But whatever I've experimented with I've taken out because it didn't work. (I've also taken some other repetitive parts out to shorten it - hence the other variables and functions.) Function EquipTorso() would change the Body SharedMesh as you may have figured out.


    Code (CSharp):
    1. import UnityEngine.EventSystems;
    2. import UnityEngine.UI;
    3. import UnityEngine.Networking;
    4.  
    5. public class Items extends NetworkBehaviour implements IPointerEnterHandler, IPointerExitHandler, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerClickHandler{
    6.  
    7. var spriteValues : SpriteValues;
    8. private var playerHealth : PlayerHealth;
    9.  
    10. var isTrue : boolean = true;
    11.  
    12. var itemNameText : Text;
    13. var itemLevel : Text;
    14. var itemRarity : Text;
    15. var itemDescription : Text;
    16.  
    17. var itemSpecial1 : Text;
    18. var itemSpecial2 : Text;
    19.  
    20. var player : GameObject;
    21. var weapons : GameObject[];
    22. var torsoArmors : Mesh[];
    23. var legsArmors : Mesh[];
    24. var ringsArmors : GameObject[];
    25. public var armsArmors : Mesh[];
    26. public var bodyColor : Material;
    27. var color : Color;
    28.  
    29. function Awake () {
    30.     player = GameObject.FindGameObjectWithTag("Player");
    31.     playerHealth = player.GetComponent(PlayerHealth);
    32. }  
    33.  
    34.  
    35. function OnPointerEnter(eventData : PointerEventData){
    36.  
    37. GetComponent(Image).color.a = 1;
    38. itemNameText = GameObject.FindGameObjectWithTag("ItemName").transform.GetChild(0).GetComponent(Text);
    39. itemLevel = GameObject.FindGameObjectWithTag("ItemLevel").transform.GetChild(0).GetComponent(Text);
    40. itemRarity = GameObject.FindGameObjectWithTag("ItemRarity").transform.GetChild(0).GetComponent(Text);
    41. itemDescription = GameObject.FindGameObjectWithTag("ItemDescription").transform.GetChild(0).GetComponent(Text);
    42. itemSpecial1 = GameObject.FindGameObjectWithTag("ItemSpecial1").transform.GetChild(0).GetComponent(Text);
    43. itemSpecial2 = GameObject.FindGameObjectWithTag("ItemSpecial2").transform.GetChild(0).GetComponent(Text);
    44. spriteValues = GetComponent(SpriteValues);
    45.  
    46. itemNameText.text = spriteValues.itemName;
    47. itemLevel.text = spriteValues.lvl;
    48. itemRarity.text = spriteValues.rarity;
    49. itemDescription.text = spriteValues.description;
    50. itemSpecial1.text = spriteValues.special1.ToString();
    51. itemSpecial2.text = spriteValues.special2.ToString();
    52.  
    53. }
    54.  
    55. function OnPointerExit(eventData : PointerEventData){
    56. GetComponent(Image).color.a = 0.7;
    57. }
    58.  
    59. function OnBeginDrag(eventData : PointerEventData){
    60. }
    61.  
    62. function OnDrag(eventData : PointerEventData){
    63. }
    64.  
    65. function OnEndDrag(eventData : PointerEventData){
    66. }
    67.  
    68. function OnPointerClick(eventData : PointerEventData) {
    69.     if (eventData.pointerId == -1){
    70.     }
    71.     if (eventData.pointerId == -2){
    72.     print("rightclick");
    73.           UseItem();
    74.     }
    75. }
    76. }
    77.  
    78.  
    79. function UseItem () {
    80.  
    81. var spriteImage = GetComponent(Image).sprite;
    82. var spriteName = gameObject.name;
    83.  
    84.  
    85.     if (gameObject.tag == "Weapon") {
    86.         EquipWeaponRight();
    87.     }
    88.  
    89.     if (gameObject.tag == "TorsoDrop") {
    90.         EquipTorso();
    91.     }
    92.  
    93.     if (gameObject.tag == "ArmLeftDrop") {
    94.         EquipLeftArm();
    95.     }
    96.  
    97.     if (gameObject.tag == "ArmRightDrop") {
    98.         EquipRightArm();
    99.     }
    100.  
    101.     if (gameObject.tag == "LegsDrop") {
    102.         EquipLegs();
    103.     }
    104.  
    105.     if (gameObject.tag == "RingDrop") {
    106.         EquipRings();
    107.     }
    108.  
    109.  
    110. }
    111.  
    112.  
    113.  
    114. function EquipTorso() {
    115.     var spriteMesh = GetComponent(MeshFilter).sharedMesh;
    116.     var spriteMaterial : Material[] = GetComponent(Renderer).materials;
    117.     var torsoDrop = GameObject.FindGameObjectWithTag("TorsoDrop").transform;
    118.     var torso = GameObject.FindGameObjectWithTag("Torso");
    119.     var toTorso = torsoDrop.transform;
    120.     var inventory : GameObject = GameObject.FindGameObjectWithTag("Inventory");
    121.     var inventorySlot = GameObject.FindGameObjectWithTag("Inventory").transform;
    122.     var torsoSlot = GameObject.FindGameObjectWithTag("TorsoSlot").transform;
    123.     var toTorsoSlot = torsoSlot.transform;
    124.     var slotCount : int = inventory.transform.childCount;
    125.  
    126.     for (var torsoArmor : Mesh in torsoArmors) {
    127.             if (torsoArmor.name == spriteMesh.name){
    128.                 for (var child : Transform in torsoDrop){
    129.                 Destroy(child.gameObject);
    130.                  }
    131.  
    132.             torso.GetComponent(SkinnedMeshRenderer).sharedMesh = torsoArmor;
    133.             torso.GetComponent(SkinnedMeshRenderer).materials = spriteMaterial;
    134.        
    135.             if (transform.IsChildOf(torsoSlot) && slotCount < 15 ) {
    136.             gameObject.transform.SetParent(inventorySlot);
    137.             torso.GetComponent(SkinnedMeshRenderer).sharedMesh = torsoArmors[0];
    138.             torso.GetComponent(SkinnedMeshRenderer).material = bodyColor;
    139.             return;
    140.             }  
    141.  
    142.             else {
    143.                 if (torsoSlot.childCount == 1) {
    144.                 var returnTorso = torsoSlot.transform.GetChild(0);
    145.                 returnTorso.SetParent(inventorySlot);
    146.                 gameObject.transform.SetParent(torsoSlot);
    147.                 gameObject.transform.localPosition = new Vector3(0,0,0);
    148.                 return;
    149.                 }
    150.                 else {
    151.                 gameObject.transform.SetParent(torsoSlot);
    152.                 gameObject.transform.localPosition = new Vector3(0,0,0);
    153.                 return;
    154.                 }
    155.             }
    156.  
    157.         }
    158.         }
    159. }
    160.  
    161. }
    162.  
     
  4. path14

    path14

    Joined:
    Apr 9, 2017
    Posts:
    113