Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice
  3. Join us on November 16th, 2023, between 1 pm and 9 pm CET for Ask the Experts Online on Discord and on Unity Discussions.
    Dismiss Notice

Behavior Designer - Behavior Trees for Everyone

Discussion in 'Assets and Asset Store' started by opsive, Feb 10, 2014.

  1. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    Thanks for the help Tony!

    The latest version of the RFPS integration does support 1.22 so we're good to go there. The issue is when you want to add in the Movement Pack tasks. Using Tony's method of just stubbing in the AIAgent script to make the CharacterDamage work with it should work well. If you send me an email after you purchase Behavior Designer I can help you get going.

    The key is to not use anything from the RFPS AI component. This component gives the RFPS character the functionality to do things such as seeing the player, attacking, or patrolling. You can do all of this with the Behavior Designer tasks so it's not needed. What you do have to worry about is allowing the player character, which is controlled by RFPS, to be able to attack and apply damage to the Behavior Designer agent. This is where I can help you, and once we get this working I'll probably update the RFPS integration with this solution because it's more extendable. You'll be able to use all of the Movement Pack tasks with this setup.
     
  2. Baraff

    Baraff

    Joined:
    Aug 16, 2014
    Posts:
    255
    I would be happy to jump in on this too, to help it progress as I really have not progressed any further.
    I basically shelved it to work on other things and planned to come back to it later.

    I did manage to get cover sort of working but not well as RFPS AI interferes as expected. It was the hack method.

    I would actually love to get mechanim up and running at the same time as I really would love for the NPC soldiers to be aiming at me vertically too, which does not happen with the legacy anims included in RFPS

    Where do we start?
     
  3. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    I should have some time tomorrow to take a closer look at it. I am basically planning on not using the RFPS AI component at all since it has so many movement/animation dependencies. I think that there will be two areas to look at: getting the agent to respond to damage, and getting the agent to be able to attack. It looks like attacking is done by calling NPCAttack.Fire which depends on the AI component. I'm thinking that we steer clear of this component as well because it depends on the AI, WeaponEffects, and FPSRigidBodyWalker component. In my mind the ideal situation would be to have the bare minimum, just have it be able to interact with the RFPS framework. You will lose some of the RFPS features but it will be a lot cleaner implementation. You also won't have to do any work to get the Movement Pack tasks to work. Do you think that this is the right path to take?
    With the setup that I am thinking of it won't depend on the RFPS framework so you can have any type of animations that you want.
    I'll let you know when I have something to try out!
     
  4. Baraff

    Baraff

    Joined:
    Aug 16, 2014
    Posts:
    255
    Sounds good.
     
  5. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,533
    Justin - in case this is any help: In my own little RFPS testbed, I disabled RFPS's AI as described above. I still let RFPS's CharacterDamage handle the NPC taking damage and dying. I have a little behavior that checks the public float CharacterDamage.hitPoints. This allows the behavior tree to make decisions based on the NPC's current health.

    To make the NPC fire, I don't use RFPS. I play my own animation. If the projectile hits, I apply damage to the target using a copy of the code in RFPS's NPCAttack.FireOneShot() method. This method checks the target's layer. Then it finds the appropriate component based on the layer (CharacterDamage, BreakableObject, FPSPlayer, etc.) and calls its specific ApplyDamage() method. It also calls WeaponEffectsComponent.ImpactEffects() and applies force to the target's rigidbody.

    I just found this to be the best way to tie it together with the minimum amount of extra code, while still taking advantage of all the RFPS features on the player.
     
    opsive likes this.
  6. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    @Baraff and @ShadowWarrior979 -

    I just got done updating the RFPS integration. I followed Tony's strategy and am using the least amount of RFPS code possible while still allowing the RFPS agent to take damage and shoot. The new sample scene includes an example of it working with the Movement Pack as well:

    BehaviorScreenshot.png
    The new integration and sample project can be found on the samples page. The documentation has been updated as well.
     
    NeuroToxin-Studios and TonyLi like this.
  7. Baraff

    Baraff

    Joined:
    Aug 16, 2014
    Posts:
    255
    I'll download now and check it out.
     
  8. Baraff

    Baraff

    Joined:
    Aug 16, 2014
    Posts:
    255
    @opsive When I look at the behavior tree it shows errors on the Seek, Can See, Rotate Towards and Patrol.
    Did I miss something perhaps?
    The last step said to replace the AI with the AIAgent but the script seemed to be there already in the sample.
     

    Attached Files:

  9. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    Make sure you've imported the Movement Pack as well. After you import you may need to reload/reimport the scene again if you've saved the missing tasks in the tree. The sample is already setup so you don't need to replace the AI component with the AIAgent component.
     
  10. Baraff

    Baraff

    Joined:
    Aug 16, 2014
    Posts:
    255
    Thanks. I got it working.
    The NPC soldier does not really do the right thing, Is this meant to be a working behavior or just a rough example to show that it now ignores the built in AI.
     
  11. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    It's just meant to be a quick example. I wanted to show three things:
    - the RFPS agent can take damage
    - the RFPS agent can shoot
    - the RFPS agent can use the Movement Pack tasks
     
  12. BortStudios

    BortStudios

    Joined:
    May 1, 2012
    Posts:
    48
    Is it possible to add support for inherited shared variables? For instance, I have actions I've written that work with a base AI type, and then actions for a more specific car AI that inherits from base AI. However, using a shared carAI variable, I'm not able to use my baseAI actions. Would it be possible to let me put carAI sharedvariables into a global variable slot for baseAI?
     
  13. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    Can you post a snippet from your baseAI and carAI classes so I can get a clearer picture? If you have a SharedVariable in your baseAI class it will appear in the task inspector for your carAI task
     
  14. BortStudios

    BortStudios

    Joined:
    May 1, 2012
    Posts:
    48
    I have written behaviordesigner tasks like this


    Code (CSharp):
    1. [TaskCategory("Custom/BaseAI")]
    2. public class IsInRange : Conditional {
    3.  
    4.     public SharedBaseAI me;
    5.  
    6.     public float distance;
    7.  
    8.     public override void OnStart()
    9.     {
    10.  
    11.     }
    12.  
    13.     public override TaskStatus OnUpdate()
    14.     {
    15.         if (Vector3.Distance(me.Value.target.transform.position, this.transform.position) > distance)
    16.             return TaskStatus.Failure;
    17.         else
    18.             return TaskStatus.Success;
    19.     }
    20. }
    Which can run from a base AI, and like this


    Code (CSharp):
    1. [TaskCategory("Custom/RigAI")]
    2. public class LockOnTarget : Action
    3. {
    4.     public SharedRigAI me;
    5.  
    6.     public override void OnStart()
    7.     {
    8.  
    9.     }
    10.  
    11.     public override TaskStatus OnUpdate()
    12.     {
    13.         me.Value.attackai.LockOnTarget(me.Value.target);
    14.  
    15.         return TaskStatus.Success;
    16.     }
    17. }
    Which requires a rigAI to run. RigAI inherits from baseAI. What I would like to do is make a behavior tree where I can use both baseAI tasks and rigAI tasks, while supplying both tasks with just a SharedRigAI variable. Otherwise, I have to write general things like checkIfInDistance for all types of AI I have, or have two global variables defined, one for the sharedbaseAI and the other for the sharedRigAI
     
  15. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    Ah, I see now - you're talking about inheriting variables rather then tasks. Thanks for the example. Is this not already possible? Here's what I did:

    Created a SharedNewVariableA and SharedNewVariableB. SharedNewVariableB uses a base class of SharedNewVariableA:

    Code (csharp):
    1.  
    2. public class SharedNewVariableB : SharedNewVariableA
    3. {
    4. }
    5.  
    I then created a new task which can use both of these variables:
    Code (csharp):
    1.  
    2. public class NewAction : Action
    3. {
    4.   public SharedNewVariableA myA;
    5.   public SharedNewVariableB myB;
    6.  
    7.    public override void OnStart()
    8.    {
    9.       Debug.Log("A: " + myA.GetType() + " B: " + myB.GetType());
    10.    }
    11.  
    12.    public override TaskStatus OnUpdate()
    13.    {
    14.      return TaskStatus.Success;
    15.    }
    16. }
    17.  
    Within the Variable inspector of Behavior Designer I then created a variable of type SharedNewVariableB. I then assigned this variable to the myA and myB fields within the NewAction task. When this task started up it outputted the following:

     
  16. BortStudios

    BortStudios

    Joined:
    May 1, 2012
    Posts:
    48
    I'm having some problems with that. I've defined my two variable types as you describe on the website:


    Code (CSharp):
    1. [System.Serializable]
    2. public class SharedBaseAI : SharedVariable
    3. {
    4.     public BaseAI Value { get { return mValue; } set { mValue = value; } }
    5.     [SerializeField]
    6.     private BaseAI mValue;
    7.  
    8.     public override object GetValue() { return mValue; }
    9.     public override void SetValue(object value) { mValue = (BaseAI)value; }
    10.  
    11.     public override string ToString() { return mValue == null ? "null" : mValue.ToString(); }
    12.     public static implicit operator SharedBaseAI(BaseAI value) { var sharedVariable = new SharedBaseAI(); sharedVariable.SetValue(value); return sharedVariable; }
    13. }
    And

    Code (CSharp):
    1. [System.Serializable]
    2. public class SharedRigAI : SharedBaseAI {
    3.  
    4.     public RigBaseAI Value { get { return mValue; } set { mValue = value; } }
    5.     [SerializeField]
    6.     private RigBaseAI mValue;
    7.  
    8.     public override object GetValue() { return mValue; }
    9.     public override void SetValue(object value) { mValue = (RigBaseAI)value; }
    10.  
    11.     public override string ToString() { return mValue == null ? "null" : mValue.ToString(); }
    12.     public static implicit operator SharedRigAI(RigBaseAI value) { var sharedVariable = new SharedRigAI(); sharedVariable.SetValue(value); return sharedVariable; }
    13. }
    But I'm not able to do that. And, when I remove all of the code from sharedrigAI so that it's just a class that's defined as the child of sharedbaseAI, the .Value returns just the regular baseAI. I guess I need to define the SharedRigAI so that .Value returns a baseAI when called from a behavior designer action that uses baseAI, and the rigAI when called from one that uses the rigAI, but I'm not quite sure how to do that
     
  17. KFK

    KFK

    Joined:
    Oct 10, 2012
    Posts:
    3
    Question about the Movement Pack (pardon me of this has been asked. I did look, but it's a big thread),

    How well do the Flee, Evade, and Cover movements deal with multiple threat agents? The demo examples only show responses to single agents. I should stress that I don't expect nuanced evasive behaviors from this package, but I would like to know if the out-of-the-box AI will take cover from Peter by running into the sights of Paul.
     
  18. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    @BortStudios -

    Instead of doing myVariable.Value, try doing a myVariable.GetValue(). This will then return the correct subclassed object. I did notice that when I setup my new variables more similar to yours I wasn't able to select the variable within the task inspector for the base variable. I just changed it so you can now select it within the popup, I'll send you a PM with the new version.

    @KFK - This is the first time that it has been asked :) Flee and Evade only take into account one threat. It would be easy to take into account multiple threats though and I can send you the modification that you would need to make. I'm thinking of taking a strategy similar to what I took with the Tactical Pack in that the friendly agent will just take the average position of all of the threats. This way the agent will go in the opposite direction of the average and avoid the majority of the threats. Cover just searches for a cover point so it isn't aware of any threats.
     
  19. KFK

    KFK

    Joined:
    Oct 10, 2012
    Posts:
    3
    @opsive - I'm genuinely surprised no one's asked about that.

    I don't have the movement pack yet, but it's good to know that the modifications shouldn't be too hard to make. I wasn't even aware of the Tactical Pack, but now that I've looked at it, it does some things I didn't even know I wanted. :)
     
    opsive likes this.
  20. Arganth

    Arganth

    Joined:
    Jul 31, 2015
    Posts:
    277
    Hey i am heavily interested in BD (especially with RFPS integration)
    my question is:

    I want to build procedurally generated levels out of room tiles
    which are glued together automatically

    is it possibly to (maybe define "waypoint or points of interest" as prefabs which are placed in all single tiles) and the AI sets up patrols automatically?

    Basically is there any way at all to make the ai behave realistically with procedural generated levels? ^^
     
  21. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    Thanks for taking a look at Behavior Designer!

    Yes, that's definitely possible. Looking specifically at the patrol task, it takes a SharedTransformList SharedVariable as the list of parameters so you can populate it dynamically after the procedural level has been created. The only thing with this is that Unity's NavMesh implementation has to be baked ahead of time so it does not support procedural levels. You should be able to use A* Pathfinding Project or Apex Path though
     
  22. Arganth

    Arganth

    Joined:
    Jul 31, 2015
    Posts:
    277
    Thx :) currently having a look at both.
     
  23. Futurerobot

    Futurerobot

    Joined:
    Jul 13, 2011
    Posts:
    179
    Hello Opsive!

    Loving behavior designer! I just replaced our old "switch/case" terrible state system with BD and realized how many
    actions we actually had, and could put together to make monsters behave. I even realized that I made a faction system a long time ago, and now the monsters in our dungeons go nuts and smash every barrel, pottery, crate and any other "other faction entity" they see. Before it just assumed it should attack the player, no decision were made. Hadn't
    tested that the combat system allowed for other targets, but it apparently did, and I sit around laughing at skeletons blowing themselves up attacking explosive barrels and thanking my previous self for keeping the code generic.

    Anyway, that was just my new-tools happiness bubbling up, actual question now. When building the project for iphone the build is successful, but I get this error in xcode when the app starts on the device:

    Unhandled Exception: System.MissingMethodException: Method not found: 'Default constructor not found...ctor() of BehaviorDesigner.Runtime.BehaviorManager+TaskAddData'.
    at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] in <filename unknown>:0

    There are no errors reported in Unity when I run the same scene. I tried to find if there were any special considerations for ios, but didn't find any.

    Thanks for the cool tool, and any help is appreciated!
     
  24. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    That's awesome! I'm glad that you're enjoying it!

    Dealing with the iOS error, are you using any build stripping? Unity made a change recently which is the cause of this TaskAddData constructor error on iOS. If you import the runtime source the error will go away. In a future version I may include an iOS specific DLL to prevent you from having to import the source (Unity 5 made this process a lot easier), but for now it's a quick workaround.
     
  25. Futurerobot

    Futurerobot

    Joined:
    Jul 13, 2011
    Posts:
    179
    Aha, using unity5.1 on Stripping Level "Strip Byte Code". If it works when I disable it I can just do that for now, it's a while until release. Will test it tomorrow! If not, I might have some questions on importing source code. Thanks for the quick reply, and again for behaviour designer. I got a billion projcects in my head I want to use it for now, really a gate opener. :)
     
    opsive likes this.
  26. Futurerobot

    Futurerobot

    Joined:
    Jul 13, 2011
    Posts:
    179
    Just popping in to say that disabling code stripping worked! Now 100 skeletons are up and detecting/tracking/attacking a troll in a testscene on iphone 5s. I have to say I intended this to break performance, so I could reduce numbers and see the limit, but it ran at 60fps. Going to add a lot fancier trees, but according to this I don't see how I'll hit any performance problems :)

    (I gave the troll a fighting chance with superspeed.)
    TrollNeverTires.gif
     
    Last edited: Aug 21, 2015
    ZJP and opsive like this.
  27. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    That's awesome! I love the gif :)
     
  28. FuzzyShan

    FuzzyShan

    Joined:
    Jul 30, 2012
    Posts:
    182
    Hi Opsive, I just wanted to ask, regarding to small simple monsters, should I just make a FSM or use behavior tree, because I heard there is actually a big chunk of cost when initializing behavior tree at runtime compare to a simple FSM, so If I spawn 20 monsters at start, it may drop framerate suddently.
     
  29. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    That's actually a tough question. I always recommend using the right tool for the job, so if it's a very simple monster then a FSM may be it. My suggestion would be to create it in whatever is easier to you, and then profile it to see if you are getting the results that you want. In terms of the startup cost, due to the data oriented design there is a higher startup cost compared to a object oriented design, but the performance savings that you get because of it makes it worth it. You can use object pooling to prevent any lag when creating a new agent during runtime. With that said, if your monster has a small tree you may be able to create 20 of them without any object pooling and have it work smoothly.
     
  30. FuzzyShan

    FuzzyShan

    Joined:
    Jul 30, 2012
    Posts:
    182
    Um... working smoothly shouldn't be a problem, for me, I think that the Behavior.Start() is taking up too much process at the Start(), wondering there is a way to optimize it, for me to instaniate 20 cubes with my FSM, I get no spikes at all, and below is when I load 20 cubes each with behaivor script to it:
     

    Attached Files:

    • shot.png
      shot.png
      File size:
      58.2 KB
      Views:
      945
  31. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    It looks like it's the deserialization process that's taking awhile. Are you using JSON or Binary serialization? Binary serialization is slightly faster if you aren't using it. Beyond that, I would pool the objects during the scene load. This way when you want to enable the monsters you don't have to go through the deserialization process and it'll start instantly.
     
  32. FuzzyShan

    FuzzyShan

    Joined:
    Jul 30, 2012
    Posts:
    182
    no i am not using any kind of Serialization, it's not my code that's doing that I don't think, 85% goes to Behavior.EnableBehaviorTree
     
  33. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    If you open up the Behavior Designer preferences you can enable or disable binary serialization. This specifies how the tree is serialized - with binary serialization being slightly faster then JSON. The advantage of JSON is that it is easier to diff the changes. The deserialization code is called within EnableBehavior upon the first run of the tree. Similar to Unity GameObjects, when the tree is instantiated the first time it has to be deserialized. This is what is causing the slowdown - if you pool your objects during the scene load you'll be able to prevent the slowdown.
     
  34. FuzzyShan

    FuzzyShan

    Joined:
    Jul 30, 2012
    Posts:
    182
    Ah, ok, understanding how it works will help me prevent it from happening. Thanks.
     
  35. riovox_johnny

    riovox_johnny

    Joined:
    Jan 6, 2015
    Posts:
    1
    Xcode Problem, the behavior of the mobile phone on the tree is not running, there is no behavior
     

    Attached Files:

  36. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    Take a look at this post for some background but all you need to do is extract the runtime source. I am working on version 1.5.3 and will try to find a workaround with that version so you don't have to extract the runtime source.
     
  37. khan-amil

    khan-amil

    Joined:
    Mar 29, 2012
    Posts:
    206
    Started tinkering with external behavior trees to somewhat simplify a big one, and encountered a small bug : when using external tree, the main tree ignores enabled/disabled state for the states of the external tree, they all are "imported" in the main tree as active.

    Btw, if I remember right you've said in the past that you've corrected that we could select hidden/folded states or links, but I still have this on the latest version.
     
  38. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    This has been fixed for 1.5.3, I can send you the fixed version if you want me to. Otherwise I hope to release this version next week.
    Do you have a link to that post? I'm trying to figure out what I said.
     
  39. khan-amil

    khan-amil

    Joined:
    Mar 29, 2012
    Posts:
    206
    Absolutely not :D I can't recall if I read it here, or on a patch note. So it's very possible that I misunderstood you, and that was just in my head that it was "supposed" to be fixed. If it's still not fixed, well, that explains why I still have it ^^

    Don't worry about next version, it's easily fixable on my end, now that I know that it can happen.
     
  40. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    :)

    I'll try it out on my end and let you know. By selecting hidden folder/states, do you mean a task has been collapsed but you can still select it?
     
  41. khan-amil

    khan-amil

    Joined:
    Mar 29, 2012
    Posts:
    206
  42. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    Are you running 1.5.2? This should have been fixed in that version. It is the connections that were able to be selected rather then the actual tasks.
     
  43. khan-amil

    khan-amil

    Joined:
    Mar 29, 2012
    Posts:
    206
    Welcome screens says 1.5.2. I'm on Unity 5.2, but had the same issue on 5.0 as well.
     
  44. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    I'll send you a PM with the latest version to see if it still occurs. If it does still occur, can you explain how you are triggering it? Is it just that you are clicking where a connection otherwise would have been? I have been clicking all around the editor to try to reproduce it but haven't been able to.

    @Futurerobot & @riovox_johnny - I have a fix for the default constructor not found exception with the dll. You no longer have to extract the runtime source to get it to work on iOS with bytecode stripping. Feel free to send me a PM with your invoice number if you want to get it ahead of time.
     
  45. khan-amil

    khan-amil

    Joined:
    Mar 29, 2012
    Posts:
    206
    No luck with the new version either. Yes, I just click on the background while some states are folded, and sometimes it select lines, it seems to be for connections a level deeper than the folded composite actions. I.e. if sequence A has children B and C, and C is a sequence with children D and E, A is collapsed but not C, it seems it only selects connections from C to D or E.

    When the connection is selected and I manage to unfold the parent sequence, the blue line falls back to the selected connection, and if I fold the sequence again, the bug appears to be fixed, but comes back when I change the focused tree, or on play.
     
  46. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    Thanks! That was key. When I 'fixed' it in version 1.5.2 I put the check within the node object and was only checking if the current node was collapsed. The proper fix is to put it one level up so the node's children won't be checked if the node is collapsed.
     
    Last edited: Aug 28, 2015
  47. twobob

    twobob

    Joined:
    Jun 28, 2014
    Posts:
    2,058
    BD. Will do that right now.

    I delete everything. BD folder.

    Stuff in Plugins.

    I import Source.

    I get:

    View attachment 152555
     
  48. opsive

    opsive

    Joined:
    Mar 15, 2010
    Posts:
    5,093
    You're using Unity 5.1, right? Can you try to import with a fresh project just for comparison? Here's what I did and it didn't throw any errors:

    1. Download the source
    2. Import the source into a fresh project. This will have to sub-packages:
    - BehaviorDesignerRuntimeSource4_3-5_0.unitypackage
    - BehaviorDesignerRuntimeSource5_1+.unitypackage
    3. Imported BehaviorDesignerRuntimeSource5_1+.unitypackage because I was using Unity 5.1.
     
    Last edited: Aug 31, 2015
  49. twobob

    twobob

    Joined:
    Jun 28, 2014
    Posts:
    2,058
    That is pretty much what I did in the other one.

    Clear everything out. just install the right source

    Will try it on a freshy as you say, thanks for the support.
     
  50. twobob

    twobob

    Joined:
    Jun 28, 2014
    Posts:
    2,058
    So yeah, imports okay on a new one. Laboriously sticking some stuff on top to see what breaks it.

    The only thing that goes near the networking code (AFAIK) is the ThirdPartyController gear so I will start there.

    Here is the other error for ref:

    Code (CSharp):
    1. UNetWeaver error: Rpc function [BehaviorDesigner.Runtime.Behavior:RpcDirtyVariableTransform] parameter [value] is of the type [Transform] which is a Component. You cannot pass a Compent to a Rpc call. Try passing data from within the component.
    2. UnityEngine.Debug:LogError(Object)
    3. Unity.UNetWeaver.Log:Error(String) (at C:/buildslave/unity/build/Extensions/Networking/Weaver/Program.cs:19)
    4. Unity.UNetWeaver.NetworkBehaviourProcessor:ProcessMethods() (at C:/buildslave/unity/build/Extensions/Networking/Weaver/UNetBehaviourProcessor.cs:1343)
    5. Unity.UNetWeaver.NetworkBehaviourProcessor:Process() (at C:/buildslave/unity/build/Extensions/Networking/Weaver/UNetBehaviourProcessor.cs:51)
    6. Unity.UNetWeaver.Weaver:ProcessNetworkBehaviourType(TypeDefinition) (at C:/buildslave/unity/build/Extensions/Networking/Weaver/UNetWeaver.cs:997)
    7. Unity.UNetWeaver.Weaver:CheckNetworkBehaviour(TypeDefinition) (at C:/buildslave/unity/build/Extensions/Networking/Weaver/UNetWeaver.cs:1436)
    8. Unity.UNetWeaver.Weaver:Weave(String, IEnumerable`1, String, String, String) (at C:/buildslave/unity/build/Extensions/Networking/Weaver/UNetWeaver.cs:1542)
    9. Unity.UNetWeaver.Weaver:WeaveAssemblies(IEnumerable`1, IEnumerable`1, String, String, String) (at C:/buildslave/unity/build/Extensions/Networking/Weaver/UNetWeaver.cs:1611)
    10. Unity.UNetWeaver.Program:Process(String, String, String, String[], String[], Action`1, Action`1) (at C:/buildslave/unity/build/Extensions/Networking/Weaver/Program.cs:33)
    11. UnityEditor.Scripting.Serialization.Weaver:WeaveUnetFromEditor(String, String, String, String, Boolean)
    12.  
    Downloading latest update 1.0.2 right now, will test
     
    Last edited: Sep 1, 2015