Search Unity

Better Trails - Unity3D Trail Replacement (Trails, smoke plumes, skid marks, etc!)

Discussion in 'Assets and Asset Store' started by Pigeon Coop, Mar 19, 2014.

  1. vapgames

    vapgames

    Joined:
    Aug 25, 2012
    Posts:
    8
    rocki
    Well, i ended up rewriting most of the thing from scratch, also adding sprite atlasing using my sprite system. So now it is very dependent on my other classes, sorry i can't separate it from the rest of the engine now without too much work.

    I used MeshFilter + MeshRenderer for every trail, so vertex coordinates are local. I add trail age and update whole mesh in FixedUpdate, and only update vertices in LateUpdate if position moved since last update to compensate for any movement in between fixed frames. And unity does automatic batching on meshes below 300 vertices (presumably manually batching more complex meshes will waste more CPU time, than GPU time you might win).
    Also i move the end point, so the trails stick to the target perfectly (otherwise you see it jumping towards the target).

    Anyway, the Better Trails code was very useful.
     
  2. Liviuss

    Liviuss

    Joined:
    Apr 2, 2014
    Posts:
    99
    Hi, i want to buy this asset but in the store it is set as Unity 4.6.0+ required.
     
  3. user1j3di3j2sa3

    user1j3di3j2sa3

    Joined:
    Nov 5, 2012
    Posts:
    566
    no footsteps demo?
    why?
     
  4. Liviuss

    Liviuss

    Joined:
    Apr 2, 2014
    Posts:
    99
    Related to unity version, in the store it's state Unity 4.6+ required, but, if you buy it you will be able to download and install the plugin in 4.5+ versions with integrated unity download manager.

    P.S. Thanks for a great asset!
     
    Last edited: Nov 19, 2014
  5. bodacheng

    bodacheng

    Joined:
    Nov 23, 2014
    Posts:
    3
    I have a big question.In the TrailRenderer_Base script , the function“ public void CreateTrail(Vector3 from, Vector3 to, float distanceBetweenPoints)” you defined is never used.then why you define such a function???
    so does the variable " private List<PCTrail> _fadingTrails;"....it seems the system works well without this variable
     
  6. Pigeon Coop

    Pigeon Coop

    Joined:
    Jan 17, 2014
    Posts:
    186
    Hey everyone! It has been a long time :)

    First of all, I want to apologize for such a huge lapse in communication. I have been busy with my day job as we were in crunch mode for PAX Australia, trying to get our projects to a reasonable/presentable level for the convention. I know it is not a very good excuse for neglecting your posts on this forum, so I just want to apologize again for that. I will do my best to answer all of your questions now!

    @Andy Lee
    Hey Andy, I've written you a function to return all the points in the current active trail. Just add it somewhere inside of trail renderer base.

    Code (CSharp):
    1. public List<Vector3> GetActiveTrailPoints()
    2.         {
    3.             List<Vector3> activePointList = new List<Vector3>();
    4.             if ( _activeTrail != null )
    5.             {
    6.                 foreach ( PCTrailPoint point in _activeTrail.Points )
    7.                 {
    8.                     if ( point.TimeActive() >= TrailData.Lifetime )
    9.                     {
    10.                         activePointList.Add(point.Position);
    11.                     }
    12.                 }
    13.             }
    14.  
    15.             return activePointList;
    16.         }
    This is one of the other reasons I created Better Trails! When you want to return an object to a pool, you can do one of 2 things. If you just want to return the trail renderer straight to the pool, call ClearSystem(false); to clear the trail on that trail renderer and disable the trail emittion. You can now safety disable+pool the trail object.

    If you don't want the trail to 'pop out of existance' when you want to delete your object, you will have to wait for the trail to completely expire. First, stop emitting the trail (Emit = false). Next, you want to keep checking 'NumSegments()' and pool your trail object only when NumSegments() = 0. If NumSegments() = 0, it means that every part of the trail has 'faded away'/'expired', so removing it at this point wont make it 'pop out of existence' as it has already disappeared. This is the method I use personally.

    This is a great idea! I'll add it to the feature wish list :)
     
  7. Pigeon Coop

    Pigeon Coop

    Joined:
    Jan 17, 2014
    Posts:
    186
    @willtrax

    Hey Willtrax! Ok, I see what you mean now. Yes, I am aware of some GC allocations, and I've done my best to reduce them. Those allocations are caused by the batching I have put in place. I don't have a way around it right now, but I am always looking for a way to improve it. When I read '1K gc allocations each frame', I thought you were seeing 1000 KB, and I freaked out a little bit..! If I can improve on the amount of garbage generated, I will tag you in my post announcing the update. :)

    @kjuanlu

    Hey Kjuanlu! Thanks for the heads up regarding the JS issues. I have no plans on making Better Trails work 'out of the box' with Javascript, but I will try and remember to put together a guide for those who require it. I'll add it to the documentation. Thanks!

    @DirtyHippy

    Hey DirtyHippy

    Read my previous post for a better insight into pooling your trails. Basically, you can call NumSegments() to check if there are any trail segments that are still 'fading out'. If NumSegments() = 0, that means there are no visible trail segments on the screen and you can safetly move the trail back into your pool.

    I like the idea of pooling PCTrail's, which'll save me from having to instantiate a new mesh for each trail segment. I'll take it into consideration, thanks for pointing it out. As for PCTrailPoints, they are already pooled to an extent. Every 'PCTrail' contains a circular buffer of PCTrailPoints. After the trail segment has been created for the first time we don't create any more PCTrailPoint's for that segment. We just keep reusing the same instanced of the points. The only thing missing, as you've pointed out, is pooling the PCTrail!

    The Reset method is invoked by Unity when you add a component to an object. It is used to populate the component with 'good default values'. You can read more about it here!

    This is an great observation. I'll put it on the todo list.

    Thanks for taking so much time to look through the code and share your thoughts DirtyHippy! Much appreciated man :)
     
    andrew_kuhn likes this.
  8. Pigeon Coop

    Pigeon Coop

    Joined:
    Jan 17, 2014
    Posts:
    186
    @Andy Lee , @rocki
    :oops::oops:

    Sorry Andy + Rocki! Please send the email through again or just leave a post here.

    @danien
    Thanks for digging right into the issue and providing so much detail.

    Yes, looks good to me. The only thing missing is to make sure we also remove any 'fading trails' that might have been added to the _matToTrailList by that Trail Renderer. But thats just a minor oversight, your overall solution is great. :D

    @vapgames

    Hey man thanks for your kind words :)


    Nice find! Community Patch #1 is shaping up nicely, go team! :p :)

    @MoHoe
    What would you like to see out of a footsteps demo? I imagine a decal system would be better geared towards 'footstep' effects? :)

    @Liviuss
    How strange! I must've accidentally submitted with the wrong version I guess! Thanks for taking the leap of faith and trying it anyway - Better Trails will definitely work in 4.5+ ;)

    @bodacheng
    Hey man, I love it when people go through the source code and point things out. Ok so, CreateTrail(...) is for your convenience! You can do whatever you like with it. I don't use it myself.

    You could, for example, create a really cool 'laser rifle' weapon effect. Use the 'smoke trail renderer', make the trail red, and use CreateTrail(...) to create a trail from your weapons barrel to the target. This will 'instantly' create a 'high resolution' trail between your 2 points. It'll be a big red line, like a lazer, and then after a while it'll appear to 'disperse' as the 'smoke' effect kicks in and starts distorting the trail. You can't achieve this effect by moving an object with a Trail Renderer component from one location to another.

    As for '_fadingTrails', well, the system will work most of the time if you remove this variable and all references to it. Basically the '_fadingTrails' list is a list of trails that are still fading away but no longer 'active'. This happens if you have a trail that fades really really slowly, and you stop emitting it and begin emitting it again a short while later before the trail has disappeared completely.
     
    andrew_kuhn likes this.
  9. bodacheng

    bodacheng

    Joined:
    Nov 23, 2014
    Posts:
    3
    Thank you for your reply,really helpful. In fact i am a student,i am very interested in your code.
    i understood the TrailRenderer_Base script and the normal trail based on it. but i cant understand your smoothTrail script. Is there some site which will explain the Principle of your script?i really want to understand it.
     
  10. eridani

    eridani

    Joined:
    Aug 30, 2012
    Posts:
    655
    Has this issue been fixed?

    Is this yet another cool asset that's been abandoned?
     
  11. EmeralLotus

    EmeralLotus

    Joined:
    Aug 10, 2012
    Posts:
    1,352
    Great that you are back. This asset is really Fantastic and would be ashamed if it's no longer supported.
    I sent you an email regarding a bug between DollyZoomCamera asset when used with BetterTrails.
    Cheers.
     
  12. DoPinG83

    DoPinG83

    Joined:
    Aug 26, 2013
    Posts:
    5
    Hi! I use Smoke Plume (Script) for fire tail effect on my helmet. The problem is that the tail doesn't change its direction if I rotate the helmet. Can I do this by playing with Smoke Plume properties or I should make changes in source code? Look at screenshots

    correct tail direction
    http://joxi.ru/12MxbwqT45X3mJ

    wrong tail direction after helmet rotate
    http://joxi.ru/MAjeg64HvbLj2e
     
  13. Pigeon Coop

    Pigeon Coop

    Joined:
    Jan 17, 2014
    Posts:
    186
    Hey @DoPinG83

    The force direction for the smoke is in world space, so it won't rotate with your gameobject. However, you can write a script to set the Smoke Plume Trail's 'force direction' to 'transform.forward' every frame. Check out the script called ConstForce in the examples folder.

    Basically, something like this:
    Code (CSharp):
    1. mySmokePlumeRenderer.ConstantForce = transform.forward * speed;
    No. I had a crack at 'fixing it' but its not very straight forward. The issue only appears at certain angles. Basically, better trails is trying to 'billboard' the trail mesh. When the trail mesh is moving directly away from the camera (direction = camera.tranform.forward) then it doesnt 'know' how to billboard correctly, because there is no correct answer. So you get this twisting effect.

    The built in trails experiance a similar issue but the problem is masked really well. I couldn't quiet replicate it. Still looking for a solution!

    Code (CSharp):
    1. Great that you are back. This asset is really Fantastic and would be ashamed if it's no longer supported.
    2. I sent you an email regarding a bug between DollyZoomCamera asset when used with BetterTrails.
    3. Cheers.
    I will buy the script myself ASAP and get back to you. I haven't used it myself so I can't really help you just yet :(
     
  14. DoPinG83

    DoPinG83

    Joined:
    Aug 26, 2013
    Posts:
    5
    Thanks! That works.
     
    Pigeon Coop likes this.
  15. Gekigengar

    Gekigengar

    Joined:
    Jan 20, 2013
    Posts:
    487
    Watching for future purchase list.
     
    Pigeon Coop likes this.
  16. bodacheng

    bodacheng

    Joined:
    Nov 23, 2014
    Posts:
    3
    dear Pigeon Coop
    After I look through the TrailRenderer script,there is something I don't understand.It seems the system adds the
    "activeTrail" to the "_matToTrailList" every frame, then at every frame the system combine all mesh in the "_matToTrailList" together then print it out on screen.....my Engish is bad but I just don't understand why the code is like this ,I think combine all meshes that added to "_matToTrailList" at every frame should be like a big mesh start from where the object began to move and end at where the object stop....But the old mesh do disappear as the mesh update every frame....can you explain it to me! Thank you
     
  17. ankitgoel

    ankitgoel

    Joined:
    Jan 3, 2013
    Posts:
    9
    Everytime i try to use trail.ClearSystem (true), it gives me a null reference exception.
    Anybody knows a work around, its screwing with my pooling system.
     
  18. Pigeon Coop

    Pigeon Coop

    Joined:
    Jan 17, 2014
    Posts:
    186
    Hey ankitgoel, what is the error you are receiving?
     
  19. ankitgoel

    ankitgoel

    Joined:
    Jan 3, 2013
    Posts:
    9
    NullReferenceException: Object reference not set to an instance of an object
    PigeonCoopToolkit.Effects.Trails.TrailRenderer_Base.CheckEmitChange () (at Assets/PigeonCoopToolkit/Effects/Trails/TrailRenderer_Base.cs:414)
    PigeonCoopToolkit.Effects.Trails.TrailRenderer_Base.ClearSystem (Boolean emitState) (at Assets/PigeonCoopToolkit/Effects/Trails/TrailRenderer_Base.cs:545)
     
  20. TeamBryc

    TeamBryc

    Joined:
    Jun 5, 2013
    Posts:
    2
    Loving this asset so much, having tread marks for a project I'm working on really adds nice detail. I do have a question on scripting though. I am trying to set Emit to false when my vehicle isn't grounded, and I'm not sure what to do to access the Emit boolean. I have a feeling that I am supposed to use

    Code (CSharp):
    1. void ClearSystem (bool emitState)
    but I am not sure where or honestly how. Do I call that function from the Trail component like this:

    Code (CSharp):
    1. exampleGameObject.GetComponent<Trail>().ClearSystem(true);
    or do I actually write that function in a script, and call it from that same script like:
    Code (CSharp):
    1.  
    2. void Start () {
    3.         ClearSystem(true);
    4. }
    5.  
    6. public void ClearSystem (bool emitState) {
    7.         //Magic goes here
    8. }
    9.  
    Thanks for any help, and thank you for this wonderful asset!
     
  21. Pigeon Coop

    Pigeon Coop

    Joined:
    Jan 17, 2014
    Posts:
    186
    Hey @Pixel8ed

    Just set the Emit bool directly.
    Code (CSharp):
    1. if(grounded)
    2.      treadTrailComponent.Emit = true;
    3. else
    4.      treadTrailComponent.Emit = false;
     
  22. TeamBryc

    TeamBryc

    Joined:
    Jun 5, 2013
    Posts:
    2
    @Pigeon Coop

    I still can't seem to actually reference the component. Doing

    Code (CSharp):
    1. transform.GetComponent<Trail>();
    Returns the error "The type or namespace name `Trail' could not be found. Are you missing a using directive or an assembly reference?"

    I've also tried making a public component variable, and a public MonoBehaviour variable to access it. While both allow the component to be referenced, I still get an error saying that "Emit" doesn't exist.

    I know that when the UI update for Unity 4.6 came out I had to add

    Code (CSharp):
    1. using UnityEngine.UI;
    to the header of any scripts that I needed to access UI components with, is there something I should be adding for Better Trails?

    Thanks once again for your help.

    EDIT:
    After some tinkering I managed to find a solution to my issue. I was able to finally reference the trails and their variables by adding the following to the header of my script:
    Code (CSharp):
    1. using PigeonCoopToolkit.Effects.Trails;
     
    Last edited: Jan 22, 2015
  23. BrightBit

    BrightBit

    Joined:
    Jan 22, 2013
    Posts:
    210
    Does "Better Trails" work in Unity 5, too?
     
  24. BTStone

    BTStone

    Joined:
    Mar 10, 2012
    Posts:
    1,238
    I imported it in a new empty project in Unity 5 and run the example scenes. All of them seem to work :)
     
    OnePxl likes this.
  25. BrightBit

    BrightBit

    Joined:
    Jan 22, 2013
    Posts:
    210
  26. Gregu

    Gregu

    Joined:
    Mar 9, 2015
    Posts:
    2
    Hello!

    I would like a developer's confirmation, that all the things work in Unity 5. Is that possible? ;)

    Also I have a question about vehicle tracks. Does this thing work on an irregular surface, ex. terrain? Your example tank looks great with its tracks, but I can only see pure horizontal decals.

    Cheers,
    Gregu
     
  27. vidjo

    vidjo

    Joined:
    Sep 8, 2013
    Posts:
    97
    This is an amazing asset. The only problem I have with it is it generates too much garbage. This asset would be easily worth $50 if it could do exactly what it currently does without generating garbage. It would be awesome if you would consider optimizing GC :)
     
  28. UmbraFidelis

    UmbraFidelis

    Joined:
    Mar 16, 2015
    Posts:
    8
    Hi, I'm developing a game where I have a buzzsaw as a projectile, and that projectile has two trails on it.

    When the buzz saw projectile is supposed to "die" it fades out. This is done by adjusting the alpha color of the object. However I discovered that when the buzz saw fades out the trails do not, even though I tried to do so. I've been fiddling with both the gradients alphakeys array and the SimpleColorOverLifeStart & End property, at runtime to no effect.

    Here's a picture of how it looks:



    To mention again, I'm trying to do this at runtime, is this possible? And if so, how?

    Any help would be much appreciated!
     
  29. UmbraFidelis

    UmbraFidelis

    Joined:
    Mar 16, 2015
    Posts:
    8
  30. Lilleaker

    Lilleaker

    Joined:
    Mar 20, 2015
    Posts:
    1
    Is it possible to move a whole weapon trail in local space on just the x and z axis? I've tried using Translate but it gives some weird results for me, thought I might not be using it right. I want to use it to mark the outer most point of a spin attack so the whole trail needs to follow the character as he moves.
     
    Last edited: Mar 20, 2015
  31. trainyard

    trainyard

    Joined:
    Sep 15, 2013
    Posts:
    6
    I am still learning code so I was wondering how many scripting changes would be required to use this in Unity 5?
     
  32. trainyard

    trainyard

    Joined:
    Sep 15, 2013
    Posts:
    6
    Does it work with Unity 5?
     
  33. ZJP

    ZJP

    Joined:
    Jan 22, 2010
    Posts:
    2,646
    No responce since Jan 21, 2015. This becomes scary all products (bought) without effective hotline .. :confused:
     
    Gekigengar likes this.
  34. Gekigengar

    Gekigengar

    Joined:
    Jan 20, 2013
    Posts:
    487
    Yeah, I was thinking on purchasing..
    But since there is no response, this becomes a scary purchase to make.
     
  35. overthere

    overthere

    Joined:
    Jun 28, 2013
    Posts:
    108
    Imports to Unity 5 with only some yellow warnings relating to a custom ui
    Demo scenes play fine

    And attaching a trail to a game object looks fine and scene plays without errors
     
    Last edited: Apr 21, 2015
  36. Pigeon Coop

    Pigeon Coop

    Joined:
    Jan 17, 2014
    Posts:
    186
    Yeah - It works fine in U5, I will release an 'official' update when I get a chance. Everything has been working fine and I havn't had any interesting feature requests or ideas lately, so I've mostly just left the tool alone rather than mess with it for nothing :)

    If I am slow to respond here, my email is always available - you can find it on our publisher page on the asset store!
     
  37. Pigeon Coop

    Pigeon Coop

    Joined:
    Jan 17, 2014
    Posts:
    186
    @UmbraFidelis editing the color values of the trail renderer at run time should work fine. Can I see your code?
     
  38. ghiboz

    ghiboz

    Joined:
    Sep 7, 2012
    Posts:
    455
    hi @Pigeon Coop !
    great job!
    I have 2 questions about trails:
    • the size is in meters? 'cause i inserted 0.2f and is not 20 cm...
    • it's possible to define an alpha outside the alpha fade?
    thanks!
     
    Last edited: May 14, 2015
  39. Junkmen

    Junkmen

    Joined:
    Sep 26, 2014
    Posts:
    1
    Hey Pigeon Coop !

    Calling ClearSystem(false); is bugged. It nulls the _activeTrail and then attempts to use it in the CheckEmitChange(); which causes null references. Kinda fixed it the easy way, but for some reason i'm getting "Combine mesh instance 0 is null" (Even before the fix. I'm using the trails on pooled objects so maybe that has something to do with it ?). Also, is there any way to change the sorting layer right now? Are there any workarounds? Thanks in advance.

    Otherwise the asset is perfect, really enjoying it right now :D :)
     
  40. SnakeTheRipper

    SnakeTheRipper

    Joined:
    Dec 31, 2014
    Posts:
    136
    This looks really really nice ! I'm considering buying it.

    If so, is there a limit of projects where it can be used ?
     
  41. AlteredPlanet

    AlteredPlanet

    Joined:
    Aug 12, 2013
    Posts:
    455
    Hello,

    I get these error when preforming a build.... Unity 5.0.1f1

    Assets/Standard Assets/Shared/Generic/Editor/InfoDialogue.cs(9,33): error CS0246: The type or namespace name `EditorWindow' could not be found. Are you missing a using directive or an assembly reference?

    Assets/Standard Assets/Shared/Utillities/Editor/RangePropertyDrawer.cs(1,7): error CS0246: The type or namespace name `UnityEditor' could not be found. Are you missing a using directive or an assembly reference?


    Assets/Standard Assets/Trails/Editor/TrailEditor_Base.cs(2,7): error CS0246: The type or namespace name `UnityEditor' could not be found. Are you missing a using directive or an assembly reference?

    Assets/Standard Assets/Trails/Editor/TrailPreviewUtillity.cs(2,7): error CS0246: The type or namespace name `UnityEditor' could not be found. Are you missing a using directive or an assembly reference?

    any idea how to fix or can you send me a new version?
     
  42. varfare

    varfare

    Joined:
    Feb 12, 2013
    Posts:
    227
    I've just bought the plugin and it seems to work in Unity 5. But I have a problem with Smoke Plume and Random Force Scale parameter. I want to achieve the same result as smoke plume from weapon barrel in weapon demo. It works fine in the demo scene but I can't recreate it in my own scene. Random Force Scale is not updated for each new created point. Instead, it is modifying general direction of smoke plume. How can I fix this?
     
  43. FuzzyQuills

    FuzzyQuills

    Joined:
    Jun 8, 2013
    Posts:
    2,875
    Well... :D It seems the scripts are in the wrong location, and Unity's trying to build editor scripts! Try moving those problem scripts to an "Editor" folder in the root of your assets folder.
     
  44. varfare

    varfare

    Joined:
    Feb 12, 2013
    Posts:
    227
    I managed to solve my problem. I had a script which was changing Random.Seed globally which was causing Trails not be able to pick random vector for each vertex.

    What I would like to see is Smooth Smoke Trail. I need Random Force Scale for my fast moving bullet but it gets quite blocky. Smooth Trail works fine but it does not have Random Force Scale.
     
  45. varfare

    varfare

    Joined:
    Feb 12, 2013
    Posts:
    227
    I have to say that although the plugin is really great the developer's support is awful. I emailed the dev few weeks ago and got no response. After installing the plugin you will see a popup-screen which says that feature requests are welcome. But how I am supposed to request anything if the developer does not answer questions posted in this forum thread nor to emails?
     
  46. justinl

    justinl

    Joined:
    Aug 27, 2012
    Posts:
    58
    Is this plugin still being supported by the developer. I reached out more than 2 weeks ago on the asset store page and also via email and social media. No response.
     
  47. vidjo

    vidjo

    Joined:
    Sep 8, 2013
    Posts:
    97
    I have written the developer months ago and still no response.
     
  48. Pigeon Coop

    Pigeon Coop

    Joined:
    Jan 17, 2014
    Posts:
    186
    Hi guys, sorry, please don't hate me :( I am still alive and kicking! :)

    I will look into these U5 issues this week - I will keep you all posted.

    @varfare I hear you loud and clear! I plan to do a bit of a rewrite of the trail mesh generation come this weekend and I plan to separate out the 'Random Force Scale' stuff. Currently it is implemented inside the smoke trail script, I want a solution that will let me add forces to trails via other scripts... So, the idea would be that you could attach a 'Smoke Modifier' script to the trail renderer, and it'll make it look 'smokey' - and you could use this on both normal trails or smooth trails. This system will open up lots of possibilities. You could write 'global' modifiers for your trails and have it affect all trails in the scene - imagine a global 'wind' modifier that'll slowly waft smoke trails in the direction of the wind.

    It should be pretty cool! But that'll be a big update that'll come later down the line. For now I will start with the U5 issues that people seem to be having.
     
    varfare likes this.
  49. varfare

    varfare

    Joined:
    Feb 12, 2013
    Posts:
    227
    New approach seems to be great. I have already implemented wind modifier for your trail system but it only works for smoke plume which I am using the most. Possibility to attach other script to drive external forces sounds great. Also, a way to replace random force would be nice. I would like to change it to simplex noise rather than a random value for each segment. You should check out Insomniac Games implementation of ribbons

    http://www.gdcvault.com/play/1020158/The-Visual-Effects-of-inFAMOUS
    http://www.fxguide.com/featured/art-directing-effects-for-infamous-second-son/
     
  50. Pigeon Coop

    Pigeon Coop

    Joined:
    Jan 17, 2014
    Posts:
    186
    Hey varfare, that is an awesome resource! Great inspiration!

    With the system I have in mind, you could even implement your own 'wind' or 'noise' method and use simplex noise! The idea would be to inherit or implement some class/interface (TrailModifier ?), and every frame your script will have a chance to 'modify' the trail before it gets rendered, so you could create all sorts of custom logic.

    There is a (big) chance I will release the new system as '2.0' and that means I might break the old trails. I am trying to think of some ways to minimize the damage - maybe a script to help convert your old trail scripts to the new ones? Hmm. I am not sure at the moment.

    I am also looking at different ways to generate the actual trail mesh. I like my current implementation but there are certain camera angles that cause the trail to 'flip around' and I want to minimize that.
     
    IndieAner3d and varfare like this.
unityunity