Search Unity

Exploder [RELEASED]

Discussion in 'Assets and Asset Store' started by reindeer-games, Jul 12, 2013.

  1. JonnyHilly

    JonnyHilly

    Joined:
    Sep 4, 2009
    Posts:
    734
    What 'layer' do the fragments go into please ?
    are they in default, or the same layer as the exploded object ?
     
  2. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Hi, for fragments it is the default layer. Is it a problem?
     
  3. gaiomed

    gaiomed

    Joined:
    May 5, 2013
    Posts:
    44
    Question regarding toolkits like 2dToolkit, SmoothMoves, etc. I tried the named plugins with your solution and they don't work. the problem is that the mesh for the sprite in those packages is created on runtime (my assumption) and so the mesh filter is empty in the editor.
    How would you tackle this?
    guess many people will try all those 2d frameworks together with your plugin so a solution would be cool..
    best.robert
     
  4. gaiomed

    gaiomed

    Joined:
    May 5, 2013
    Posts:
    44
    Regarding Sprites I debugged that a bit and it seems your plugin is getting the mesh (4 vertices) but it doesn't seem to be doing anything useful than adding a rigidbody to the mainpart so it starts descending....
    a solution for that would be very much needed as I was buying the plugin for this very purpose of blowing things up in 2d....with a solution I am already working...
     
  5. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Hi,

    yes, it works, please find ExploderOption script and assign it to your 2d sprite object, set Plane2D to True and now the explosion should work. My apology it is not in the documentation, let me know if you have any more problems.
     
  6. gaiomed

    gaiomed

    Joined:
    May 5, 2013
    Posts:
    44
    i followed the thread here so I already tried that, it is not working with that option, I can however create a plane and texture it, but that is not what I want, as 2d toolkit make an optimised sprite atlas for me and I want to keep this workflow, can't afford to draw planes with a lot of tris all over...
    I guess this problem is consistent with all 2d packages out there NGUI, ex2d, etc.. you could try with a free version of NGUI...to check for yourselfe
     
  7. JonnyHilly

    JonnyHilly

    Joined:
    Sep 4, 2009
    Posts:
    734
    Its not really a problem, I managed to get fragments from the Pool, and set them into the layer I wanted ( I want them in a separate layer, so I can ignore them for collisions or light them differently from other objects)

    However, I would suggest that making the 'pool' variable public, I think it is private in the version I have. So I have to modify your script every time I get new version.
     
  8. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Sorry to hear that, I have 2d toolkit and free version of NGUI on my home machine, I will fix that.
     
  9. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Hi,

    I just found and fixed the problem, now it works very well with 2D Toolkit sprites. However I haven't found a solution for NGUI yet, there seems to be different handling of geometry and mesh renderer. Exploder is looking for mesh renderers and mesh filters in the tagged GameObject, NGUI seems to be working in its own way. I will look at the code and docs more closely and see what I can do.

    Except NGUI it should be working fine, so if you want I can send you patch via email.
     
  10. JonnyHilly

    JonnyHilly

    Joined:
    Sep 4, 2009
    Posts:
    734
    Hi, I am having some issues getting list of fresh exploded parts...
    First I call...
    ExploderObject.m.ExplodeObject(gameObject);

    If I watch the scene, my object explodes into 10 parts or so. great so far.

    Next I try to find those 10 parts....
    I tried looking in ExploderObject.m.pool.Count , but the count is 0

    Next I tried looking in the scene hierarchy, I noticed there is a container there with all the active and inactive debris parts... great..

    frags = GameObject.Find("FragmentRoot"); //find scene container for fragments
    Transform[] frg = frags.GetComponentsInChildren<Transform>();
    but frg.Length is only 1

    I suspect it is not adding all fragments immediately in the ExplodeObject() function. (maybe delayed until later frames ?)

    After the second explosion, it now returns 12 or 13 objects... and if I set these all to my desired layer, most of the debris in the scene are in the correct layer, but still one or two are in wrong layer.

    How can I get a list of my debris/fragments please (from current / last explosion).... so I can attach things or modify the properties ? Maybe I am just doing things the wrong way.
    (I want to attach particle FX, and I want to set Layer and tag settings.
    Thanks
     
    Last edited: Jul 27, 2013
  11. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Hi,

    I already made some changes about that but better send me your e-mail in PM I will give you patch, unity submission can be very slow.
     
  12. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Hi,

    new version of Exploder 1.0.13 is already in the asset store.

    Changes:

    * more deactivate options for fragment pieces (timeout / outside of camera / none)
    * fixed explosion of 2d sprites (tested with 2d toolkit)
    * added more methods for manipulating fragments (get, deactivate, getActive, ... see more in FragmentPool.cs)
    * updated explosion callback (explosion start, explosion end)
    * added example class to show how to use explosion callbacks (and get fresh fragments)

    Also it would be nice if you can rate Exploder.

    Thanks!
     
  13. JonnyHilly

    JonnyHilly

    Joined:
    Sep 4, 2009
    Posts:
    734
    Thanks, version you sent is working great.

    just rated Exploder.
     
    Last edited: Jul 30, 2013
  14. suctioncup

    suctioncup

    Joined:
    May 19, 2012
    Posts:
    273
    Does this support directional forces? In the RPG video it looks like some of the shrapnel is coming back towards the player, in real life they would all be flying away. (I think).
     
  15. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Yes, it does. You can specify 3d vector of explosion. For example in the demo you have seen the shotgun is using directional vector which is equal to camera direction. RPG and grenade does not use any directional vector so the explosion goes in every direction (which is the default settings).
     
  16. Play_Edu

    Play_Edu

    Joined:
    Jun 10, 2012
    Posts:
    717
    Awesome work man .This same types of Technic use in unreal and cry engine. And there is any possibility to recombine the mesh return Like particulizer.

    http://www.kalagaan.com/?p=particulizer
     
  17. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Hi, thanks.

    You mean to turn fragment pieces into particles and use particle system to handle them? I think it is possible because you can get list of pieces after explosion and also you can use particle system to work with meshes. It sounds like a nice feature, I will add it to the list of future updates.
     
  18. toto2003

    toto2003

    Joined:
    Sep 22, 2010
    Posts:
    506
    That would be awesome, I m curious how cool that would look!
     
  19. w00dn

    w00dn

    Joined:
    Apr 28, 2010
    Posts:
    275
    @reindeer games: I'd like to add another option to that list of future updates if I may :p
    Would it be possible to make sure disconnected mesh pieces of each fragment become their own fragment? Currently it often happens that a mesh gets split in a way that looks unnatural because sometimes, disconnected meshes are part of the same fragment and thus use the same collider.

    Example:

    $fragmentsplit.png

    This example of a "two cube mesh with a gap" model got split once. the split happens horizontally and leaves two fragments (A and B). Now it would be cool if the tool would detect that the mesh of piece A are in fact two separate meshes with no connection and would thus split them again to two pieces (A1 and A2). So with this example, you'd end up with 4 fragments from one split.
     
  20. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Hi, I know exactly what you mean. I noticed it when I was constructing the FPS demo. However detecting and splitting two disconnecting meshes is not as easy as I thought :). But not impossible, I will think about it and see what I can do. It can be an extra option because I can imagine that this would take additional computation power (more frames to process).

    And FYI am going to vacation and I will not be able to fix any problems in next two weeks.
     
  21. Play_Edu

    Play_Edu

    Joined:
    Jun 10, 2012
    Posts:
    717
    Thanks for the answer.it will be amazing if you add this type of future.
     
  22. w00dn

    w00dn

    Joined:
    Apr 28, 2010
    Posts:
    275
    @reindeer games: Cool! Have a great vacation! :)
     
  23. DMTSource

    DMTSource

    Joined:
    Jul 11, 2013
    Posts:
    35
    Im having some trouble with using Exploder in a project. First of all its working AMAZINGLY on the web player. But when I switch the same project over to the stand alone pc/mac/linux player, the Exploder scripts start to give some errors and crash the game. Im unsure if why this exists between environments or if its a problem within Exploder or the geometry that I'm using.

    Not allowed to access triangles on mesh 'Combined Mesh (root: scene) 2'
    UnityEngine.Mesh:get_triangles()
    Exploder.MeshCutter.MeshCutter:Cut(Mesh, Transform, Plane, Boolean, Mesh, Mesh, Vector3, Vector3) (at Assets/Exploder/Exploder/MeshCutter/MeshCutter.cs:184)
    Exploder.MeshCutter.MeshCutter:Cut(Mesh, Transform, Plane, Boolean, Mesh, Mesh, Vector3, Vector3, Color, Vector4) (at Assets/Exploder/Exploder/MeshCutter/MeshCutter.cs:171)
    ExploderObject:processCutter() (at Assets/Exploder/Exploder/ExploderObject.cs:718)
     
  24. w00dn

    w00dn

    Joined:
    Apr 28, 2010
    Posts:
    275
    I think that's related to static batching. Do you explode meshes marked as static?
     
  25. DMTSource

    DMTSource

    Joined:
    Jul 11, 2013
    Posts:
    35
    Yes, some of them are. I guessed that wasn't a problem since it worked so well on the mobile version. I will try to mess around with my settings, thanks!
     
  26. DMTSource

    DMTSource

    Joined:
    Jul 11, 2013
    Posts:
    35
    Sorry. I was able to keep my items navigation static and remove the rest. Exploder is working perfectly sorry about that!
     
  27. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    New version of Exploder is already on the asset store:

    * Added option for not tagging GameObject and marking it by different script object (Explodable), this can be useful when you already have tagged GameObject and don't want to re-tag it to "Exploder"

    * JavaScript method for changing Exploder parameters, now JavaScript users can change parameters from the code

    More will come :)
     
  28. FrozenTarzan

    FrozenTarzan

    Joined:
    Aug 8, 2013
    Posts:
    17
    Hi,

    first of all thanks for your plugin! I try to use Exploder in a 2D game (using RageSpline) and there are a few things which cause some trouble:

    * I need to freeze the Z-Coordinate of the position and the rotation (in X and Y) of the generated fragments. I'm not sure how to get full access to the generated fragments. And I don't want to change the properties after they are generated, I want to set them at creation time. I changed the properties of the rigidbody here:
    FragmentPool.cs, Allocate(...)
    var rigid = fragment.AddComponent<Rigidbody>();
    // !!! constraints for 2D games... should be handled via options/globals
    rigid.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezePositionZ;

    It would be great to have more control over the creation process.

    * In my game there are the player and some bottles made of glass. When the player falls into the bottles they get destroyed. I have a setup where an "Empty Game Object" acts as a "folder" for a sprite/quad that is similar to the planes in your example project. Beside the sprite there is a 3D Cube that acts as a trigger which is used for the player-collision. So when the player enters the trigger, the sprite/Exploder/quad/plane (however you would like to call it) is exploded. Maybe you have a better idea for such a setup, but it seems to work fine for now. The problem is that I want the fragments to be in a specific layer so I can have full control regarding the physics collision detection. For example, I want the player to collide with the original object but I want to turn off the collision detection for the generated fragments.

    * Another problem is when the player enters a trigger and then enters another trigger (a short time after that or even at the same time). Then only the first bottle explodes and the rest is ignored. I tried to create a simple sample project that calls the Explode method for 2 object in a scene in one iteration. So the ExploderObject is set to the position of the current object, then the Explode function is called. Those steps are repeated for the second object. It seems that it is impossible to use the same ExploderObject for multiple objects in the scene at the same time. Here is some pseudo code i would like to see working:

    void DestroyAllExploderObjectsInTheScene()
    {
    GameObject[] destroyableObjects = GameObject.FindGameObjectsWithTag("Exploder");

    foreach (var o in DestroyableObjects)
    {
    ExplodeObject(o);
    }
    }

    void ExplodeObject(GameObject gameObject)
    {
    Utils.SetActive(ExploderObjectInstance.gameObject, true);
    ExploderObjectInstance.transform.position = Utils.GetCentroid(gameObject);
    ExploderObjectInstance.Radius = 1.0f;
    ExploderObjectInstance.Explode(OnExplosion);
    }

    * A question about the fixedTimeStep: In ExploderObject.cs there is this line of code:
    Time.fixedDeltaTime = slowMotionSpeed * 0.02f;

    The 0.02f seems to be the FixedTimeStep that I can change in the project settings. Since I have changed this value to 0.01f in my project I would have to adjust this value as well. Is this correct? When I don't want the built in possibilities of the "bullet time effect" could I simply comment this line out and be fine? Maybe a #define would be useful to turn the time-option off.

    Thank you very much for answering a rather long post ;-)
     
  29. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Hi, thanks for buying the package.

    to answer your questions:

    Good idea, I will add it to global options.

    If I understand you correctly, you would like to add a global settings for fragments to set the specific layer? I can do that.

    Yes, currently it is not possible. You can use exploder only once at the time. The reason is that the explosion can be calculated over multiple frames, it does not happen immediately. However I can add a buffer queue where you will be able to call Explode() multiple times and all explosions will be calculated sequentially.

    Yes, you can comment it out. This piece of code is from my demo and I will comment it out in future version, I completely forgot about it, thanks for finding it.

    You are welcome, I am sorry for late answer, I haven't seen any notification email.
     
    Last edited: Aug 22, 2013
  30. FrozenTarzan

    FrozenTarzan

    Joined:
    Aug 8, 2013
    Posts:
    17
    Exactly! :)

    Such a buffer would be nice, although there might be a problem because some object may explode with a delay. Do you think it is a good idea to instantiate multiple ExploderObjects at a time? As far as I can tell from looking into your code, this might result in some issues, since the FragmentPool is a singleton.

    I'm looking forward to an updated version. I would spend another 5 stars for your great support!
     
  31. bocs

    bocs

    Joined:
    May 9, 2009
    Posts:
    335
    Just purchased, Mainly cause I like how you support your assets and will fix bugs and add reasonable requests quickly.
     
  32. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    You are right, using multiple ExploderObject can cause some issues because of that singleton. Also if there is more than one exploder you can expect some performance issues because the calculations can be expensive (and more expensive if you run it multiple times). I will make the queue and you can try to increase TimeBudget parameter if you see any delay.
     
  33. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Thank you, I really appreciate it!
     
  34. MatrixNAN

    MatrixNAN

    Joined:
    Apr 11, 2013
    Posts:
    9
    NullReferenceException: Object reference not set to an instance of an object
    ExploderObject.Update () (at Assets/Exploder/Exploder/ExploderObject.cs:658)

    Error occurs when I leave the level to go to another level then come back to this level later. The explosion stops working altogether. When the level first originally loads it works just fine.

    Cheers,
    Nate Nesler
     
  35. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Okey, thanks for bug report, I check it.
     
  36. MatrixNAN

    MatrixNAN

    Joined:
    Apr 11, 2013
    Posts:
    9
    line 6 5 8 timer.Reset(); Sorry I just noticed that it did a smiley face with glasses with the line number instead of putting the correct line number thats why I have placed spaces between the numbers in the line number. I didn't see that one coming. lol Thanks for having a look at it. I am not sure why timer would be null. I even tried making it static so that it would persist but that was not the solution.

    Cheers,
    Nate Nesler
     
  37. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    I made a quick fix for you:

    Add this to Start() in Fragment.cs:

    Code (csharp):
    1. DontDestroyOnLoad(gameObject);
    Add this to constructor FragmentPool() in FragmentPool.cs:

    Code (csharp):
    1. Object.DontDestroyOnLoad(fragmentRoot);
    Add this method to ExploderObject.cs:

    Code (csharp):
    1.     private void OnDestroy()
    2.     {
    3.         FragmentPool.Instance.DestroyFragments();
    4.     }
    5.  
    Now it shouldn't crash when you go to next scene and back, I will make a proper fix to next update.

    Cheers.
     
  38. MatrixNAN

    MatrixNAN

    Joined:
    Apr 11, 2013
    Posts:
    9
    Thanks for the quick response. The DontDestroyOnLoad makes total since I didn't think of it. Its totally straight forward.

    This Code Worked Great.
    Add this to Start() in Fragment.cs:
    DontDestroyOnLoad(gameObject);


    Add this to constructor FragmentPool() in FragmentPool.cs:
    Object.DontDestroyOnLoad(fragmentRoot);

    Code that didn't work. This piece of code destroyed the fragments so that there never was any fragments. I took this code out and it works perfectly now with no mistakes. You have your solution just don't put this last bit a of code in below.

    Add this method to ExploderObject.cs:
    private void OnDestroy()
    {
    FragmentPool.Instance.DestroyFragments();
    }

    Cheers And Big Thanks Again,
    Nate Nesler
     
  39. metaleap

    metaleap

    Joined:
    Oct 3, 2012
    Posts:
    589
    This looks awesome! One question though: asset desc says "full source code included" and I do see lots of source files but I also see a DLL in 3rd/poly2tri.dll. What is this and is this necessary / non-replaceable with source code? Reason I'm asking is I have this principle of my game projects not relying on closed DLLs that I have little to no control over. I basically try to retain full control over all code powering the game, also to be sure that I'll have an easier time making things run as the general tech evolves and progresses. Who knows if Unity won't be moving away from Mono 5 years down the line, or whatever. Who knows whether this dll has some timebomb or will crash a future Mono framework version and by then the original developer will be long gone.

    So what's the story for this dll? Is this some 3rd-party lib you licensed specifically for resale under some custom terms? Or an open-source lib you are allowed to distribute only in binary form, but we could still replace it with the open-source in our projects? Is this something that gets still updated fairly frequently or is it "old hat, solid standard utility lib" that one could extract with Reflector... or is it your "secret sauce" not to be touched :D

    Also, I build my mobile projects with the full "stripping level" ("micro mscorlib"), can Reindeer or any mobile devs using this verify that this code will build under such a setup?
     
  40. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Hi, thank you for your interest.

    I have good news for you, Poly2Tri library is an open source library for triangulation of polygons with holes, I just use DLL for easier maintenance. You can freely download the library source code from http://code.google.com/p/poly2tri/ (select c# port) and build it or just use the source code in your project.
     
  41. metaleap

    metaleap

    Joined:
    Oct 3, 2012
    Posts:
    589
    Glad to hear it, thanks!
     
  42. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    New version of Exploder is finally in the asset store.

    Changes:

    * option for splitting not connecting parts of the same mesh (see this link)
    * more options for fragment pieces (freeze position/rotation, layer)
    * exploder queue, now you can run explode() in sequence without waiting

    $version1.1.jpg
     
  43. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Hi,

    new version of Exploder was just published, I added option for splitting not connecting parts of the same mesh. Please test it with your project if it works as expected. Note that this option will take some extra time to process, but if you are using low poly models you won't notice much. You can enable it by checking "split mesh islands" in exploder option.
     
  44. w00dn

    w00dn

    Joined:
    Apr 28, 2010
    Posts:
    275
    So great! Thank you for this update. I'll check it out as soon as I can. :)
     
  45. FrozenTarzan

    FrozenTarzan

    Joined:
    Aug 8, 2013
    Posts:
    17
    Hi reindeer games,

    I've just tested the exploder-queue but I'm not able to get the following example working:

    * I have a scene with 2 objects tagged with the "Exploder" tag.
    * There is an ExploderManager that simply has the following code:

    public ExploderObject ExploderObjectInstance = null;
    private GameObject[] DestroyableObjects;

    void Start () {
    DestroyableObjects = GameObject.FindGameObjectsWithTag("Exploder");
    }

    void Update () {
    if (Input.GetKeyDown(KeyCode.Return)) {
    foreach (var o in DestroyableObjects) {
    ExplodeObject(o);
    }
    }
    }

    void ExplodeObject(GameObject gameObject) {
    ExploderUtils.SetActive(ExploderObjectInstance.gameObject, true);
    ExploderObjectInstance.transform.position = ExploderUtils.GetCentroid(gameObject);
    ExploderObjectInstance.Radius = 1.0f;
    ExploderObjectInstance.Explode(OnExplosion);
    }

    * When I hit the "Return"-key only one object explodes. The behavior is pretty similar to the version before 1.1. What do I have to do to get the queue working? I want to move the exploder object to another position and call explode in a single frame. This is very important because when a moveable object has a high velocity it can penetrate multiple breakable objects in one single frame. In this case only the first one explodes. I have described this behavior before in an other post.

    * Another thing to mention: When an explosion happens the first time I notice a small stutter of my game. I guess you are initializing stuff at the first call to Explode() ?! The work-around is of course to start the scene with a dummy object and let it explode, but it would be nice, if you could handle the initialization stuff before hand. :)

    * Thanks a lot for the physics options regarding the fragments!

    * I've also noticed that you have reworked the timing stuff in the Update method of the ExploderObject :)

    Great work so far! I'm looking forward to a fix for the queue :)
     
    Last edited: Sep 3, 2013
  46. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Really weird, I will test it more later today...
     
  47. Syst3m7

    Syst3m7

    Joined:
    Jul 20, 2013
    Posts:
    2
    I'm new to Unity... :) (although what I'm about to ask will surely make that obvious. lol)
    The exploder demos all work fine, but I'm trying to add it to my own project. The base for my project is: Badumna Bootcamp Demo...
    I believe that my main problem is that I'm not sure how to "Call Explode()" or even what script I should add that to or where. I've added an empty GameObject, attached the ExploderObject script to it, then added a cube and applied the tag Exploder to the cube. From looking at the scripts for the Bootcamp demo, it appears to use Raycasting, but nothing happens when I shoot the cube object. Any help would be very much appreciated. Thank you in advance.
     
  48. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    I have tested your code in my demos and it works fine, the only problem I can see is that your second object is moving and when exploder after few frames wants to calculate the explosion your second object is already away from its original position and nothing happens. Is it possible?
     
  49. reindeer-games

    reindeer-games

    Joined:
    Mar 5, 2013
    Posts:
    547
    Hi there,

    thanks for purchasing the exploder!

    I think the best way to see how to use Raycast is if you can look into my FPS demo. You can look into these script:

    TargetManager - there you can find in Update() method that I run a raycast in direction of main camera and then I get a list of hit objects, I sort the list by distance and mark destroyable objects

    ShotgunController - here in Update() method I check for mouse button to be pressed and then check if TargetManager have something to destroy, if yes, I move exploder object to its position and call exploder.Explode()

    I hope it will help you, the code is not much commented but should be simple enough. You can also check another demo DemoClickExplode.cs where I use raycast to find object on mouse click.

    Cheers.
     
    Last edited: Sep 5, 2013
  50. Syst3m7

    Syst3m7

    Joined:
    Jul 20, 2013
    Posts:
    2
    Thank you, this has helped my understanding of it a little better. But I think my problem now is the differences in Javascript C#. I've tried over and over different ways to piece it all together with no luck. My projects script is TargetManager.js and I am trying to figure out how to use your code to work with Javascript. I just don't know how to make it work.

    Is it possible to just have a single script that creates a new raycast, and calls explode(), that will work with this, one that I can attach to the player or something? I'm really in over my head, but I don't want to give up, especially since I purchased UnityPro. lol By the way, thank you so much for your help.