- Home /
 
 
               Question by 
               arduinomacerasi · Dec 26, 2020 at 11:35 AM · 
                networkingmirror  
              
 
              InvalidProgramException: Invalid IL code? Mirror
This is not duplicate of any other issue
I wanted to Network Transform component to work with UDP. So I installed Ignorance.
And I wrote my own version of NetworkTransformBase component to work with UDP.
The code is:
 using Mirror;
 using UnityEngine;
 
 public abstract class NetworkTransformBase : NetworkBehaviour
 {
     protected abstract Transform targetTransform { get; }
 
     [Header("Authority")]
 
     [Tooltip("Set to true if moves come from owner client, set to false if moves always come from server")]
     [SyncVar]
     public bool clientAuthority;
 
     [Header("Synchronization")]
 
     [Tooltip("Set to true if position should be synchronized")]
     [SyncVar]
     public bool syncPosition = true;
 
     [Tooltip("Set to true if rotation should be synchronized")]
     [SyncVar]
     public bool syncRotation = true;
 
     [Tooltip("Set to true if scale should be synchronized")]
     [SyncVar]
     public bool syncScale = true;
 
     [Header("Interpolation")]
 
     [Tooltip("Set to true if position should be interpolated")]
     [SyncVar]
     public bool interpolatePosition = true;
 
     [Tooltip("Set to true if rotation should be interpolated")]
     [SyncVar]
     public bool interpolateRotation = true;
 
     [Tooltip("Set to true if scale should be interpolated")]
     [SyncVar]
     public bool interpolateScale = true;
 
     protected Vector3 positionGoal;
     protected Quaternion rotationGoal;
     protected Vector3 scaleGoal;
 
     private void Update()
     {
         ServerUpdate();
         ClientUpdate();
     }
 
     [Client]
     protected void ClientUpdate()
     {
         ClientTransformUpdate(targetTransform.position, targetTransform.rotation, targetTransform.localScale);
     }
 
     [Server]
     protected void ServerUpdate()
     {
         TransformUpdate(targetTransform.position, targetTransform.rotation, targetTransform.localScale);
         InterpolatePosition(targetTransform.position);
     }
 
     [Command(channel = 1)] //Set to UDP
     public void ClientTransformUpdate(Vector3 position, Quaternion rotation, Vector3 scale)
     {
         if (clientAuthority)
         {
             if(syncPosition) targetTransform.position = position;
             if(syncRotation) targetTransform.rotation = rotation;
             if(syncScale) targetTransform.localScale = scale;
         }
     }
 
     [ClientRpc(channel = 1)] //Set to UDP
     public void TransformUpdate(Vector3 position, Quaternion rotation, Vector3 scale)
     {
         if(!clientAuthority)
         {
             if(syncPosition) positionGoal = position;
             if(syncRotation) targetTransform.rotation = rotation;
             if(syncScale) targetTransform.localScale = scale;
         }
     }
 
     protected Vector3 InterpolatePosition(Vector3 currentPosition)
     {
         if (!interpolatePosition)
             return currentPosition;
 
         float speed = 0.5f;
         return Vector3.MoveTowards(currentPosition, positionGoal, speed * Time.deltaTime);
     }
 }
 
               And the non-abstract code is: using UnityEngine;
 [DisallowMultipleComponent]
 [AddComponentMenu("CodeEasyYT Networking/Network Transform")]
 public class NetworkTransform : NetworkTransformBase
 {
     protected override Transform targetTransform => transform;
 }
 
               But I get this error:
 InvalidProgramException: Invalid IL code in NetworkTransformBase:ServerUpdate (): IL_000f: call      0x0a00000a
 NetworkTransformBase.Update () (at Assets/Scripts/NetworkTransformBase.cs:48)
 
               Please help.
               Comment
              
 
               
              Your answer