Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Unity3d Pinball Sample Project

Discussion in 'Community Learning & Teaching' started by Gamieon, Jul 1, 2011.

  1. Gamieon

    Gamieon

    Joined:
    Mar 20, 2010
    Posts:
    38
    I'm currently working on a pinball game. Some bug reports have come in about the ball going through flippers. It's not an issue foreign to the Unity forums; and while they've been helpful, I still haven't been able to nail the problem to a releasable level of quality.

    I think the best approach to fixing this problem is one that can also benefit the Unity community at the same time. I have a sample project up at http://www.gamieon.com/pinballtest/GamieonPinballTest.zip which is a sandbox to diagnose and fix the problem. I think that when it's fully working, it would be a good project for Unity developers who are interested in making pinball games to look at because it's ready to "play" out of the box.

    While I'll focus the QA discussion at http://forum.unity3d.com/threads/85105-Fast-ball-going-through-flipper.?highlight=pinball+flipper ... what's the best way to go about putting up this kind of project for Unity developers to download and benefit from? And how should it be packaged?
     
  2. hippocoder

    hippocoder

    Digital Ape

    Joined:
    Apr 11, 2010
    Posts:
    29,723
    if using physics are you performing changes in the fixedupdate loop? I ask because on different machines you'll get different physics if you don't.
     
  3. Gamieon

    Gamieon

    Joined:
    Mar 20, 2010
    Posts:
    38
    Yes sir. The code is basically laid out like:

    function FixedUpdate()
    {
    Do everything that VelocityLimiter.js does in FixedUpdate
    Do everything that DontGoThroughThings.js does in FixedUpdate
    If the ball is falling, detect if it's in range of each flipper, and if so, cast a ray from the center of the ball in the backwards direction...if the ray touches the upper edge of the flipper, that means the ball somehow got directly behind it. In that case, the ball velocity is reversed and amplified to go back up and away from the flipper. (This works pretty well 90% of the time)
    }
     
  4. Gamieon

    Gamieon

    Joined:
    Mar 20, 2010
    Posts:
    38
    For what it's worth mentioning, the Fixed Timestep is set to 0.015. On an iPhone 3GS, the average physx time usage in my game when the ball is at rest and eight enemies are bouncing on the screen is about 3.5.
     
  5. hippocoder

    hippocoder

    Digital Ape

    Joined:
    Apr 11, 2010
    Posts:
    29,723
    is there a reason you're not simply using continous dynamic options? these remove the need for raycasts and things can't possibly fly past each other due to the fact the physics engine is using a sweep test.
     
  6. Gamieon

    Gamieon

    Joined:
    Mar 20, 2010
    Posts:
    38
    No...I've honestly never used anything outside Discrete. You just made a huge light bulb appear over my head. From the docs:

    Use continuous collision detection against objects set to Continuous and Continuous Dynamic Collision. It will also use continuous collision detection against static MeshColliders (without a rigidbody). For all other colliders it uses discreet collision detection. Used for fast moving objects

    So...I set the flippers and ball to continuous collision detection and leave all else alone?
     
  7. Ippokratis

    Ippokratis

    Joined:
    Oct 13, 2008
    Posts:
    1,521
    I tried to reproduce the problem you described. It appeared once in 10 tries.
    After applying Hippocoder's suggestion I tried many times to reproduce it ( over 30 ), in some of which I changed the Max Velocity of the ball to 600. I think it is solved now.
    Thanks for the project.
     
    Last edited: Jul 13, 2011
  8. Gamieon

    Gamieon

    Joined:
    Mar 20, 2010
    Posts:
    38
    Awesome! I've also observed the same on my iPhone 3GS...and I knew there were moments where it surely would have fallen through in the past.

    I need to update the sample project to have continuous dynamic collisions just in case someone links it from elsewhere and no mention of it is made.
     
  9. mokitochan

    mokitochan

    Joined:
    Jul 7, 2011
    Posts:
    1
    Hello, I like pinballs, and I would like to thank you a lot for providing us with this example.
    I have been searching for a project like this for months, since I would like to make my own pinball game, and I also want to learn unity3d (I'm starting at it)

    Googling I have found some simple unity3d pinball projects, but none as good as this one as a starting point.

    This other one looked quite nice and complete, but it seems that the source code became unavailable when the developer's domain expired, and he does not longer participate in the forum.
    http://forum.unity3d.com/threads/40591-Pinball-project-for-developers-for-free-)

    In my case, activating continuous dynamic collisions has improved collision detection, but mistakes still happen from time to time, specially is ball velocity is increased (for example to 350) to make the ball movement more fast and real.

    I don't understand why that does not happen to you when increasing the speed to 600, Ippokratis. With not so high speed I easily get the ball out of bounds since it does not even collide with upper and side playfield walls.

    So leaving active the other functions (like the DontGoThroughThings you described previously) is still useful to have less wrong "non collision" events, but they still happen sometimes. The pity is that the fixing function that corrects the ball's speed direction when it is under the flippers without collision having been detected introduces some gaming artifacts for the player, since collision is not detected exactly at the time it should.

    I have noticed also that the behaviour of the tips of the flippers is sometimes unreal, I don't know if putting a more accurate collider geometry instead of a box (if it is a box, i'm not sure) could improve that.


    Will you upload the updated version with continuous dynamic already activated?
    I think I have activated it right, but I would like to test it, specially if you don't suffer collision problems anymore.
     
    Last edited: Jul 13, 2011
  10. Ippokratis

    Ippokratis

    Joined:
    Oct 13, 2008
    Posts:
    1,521
    Have you tweaked this too ?
     
  11. Rush-Rage-Games

    Rush-Rage-Games

    Joined:
    Sep 9, 2010
    Posts:
    1,997
    Thanks for the project!
     
  12. Gamieon

    Gamieon

    Joined:
    Mar 20, 2010
    Posts:
    38
    The present version should have continuous dynamic collisions. To verify, you can select either flipper and look at its rigidbody properties.


    The statement about the flipper tip behavior is accurate. The flippers use box colliders. You'll even notice the boxes extend past the tips just a little bit...I did that a long time ago (before continuous collisions) because the ball kept going through the flipper tips. I'm still wary about it.


    I tweaked the timestep to 0.015 a couple weeks before I learned about continuous collisions. It may have helped slightly but it's purely anecdotal...I honestly forgot the default value I started with.


    Lastly, I discovered an issue where in my game (not this simulation), the ball can be pushed -into- the walls in exactly the right fast-paced conditions! I worked around the problem by adding code into the ball script that detects whether the ball has been stationary above flipper level for more than 8 seconds; and if so, it just destroys the ball and puts a new one back in the launcher.
     
  13. Ippokratis

    Ippokratis

    Joined:
    Oct 13, 2008
    Posts:
    1,521
    There are some things regarding physics that are worth to mention. I am not sure if everybody is aware of them, I was not.
    1. Gravity is acceleration, not velocity.
    2. Non - moving objects with colliders should have rigidbodies.
    3. Moving objects should be put in motion via forces, not Transform directly.
    4. If any of 2 and 3 is not applied, physics engine gives a performance hit.
    5. To have moving objects via Transform with colliders it is reported that one should implement his own collision system. I have no idea how this can be made.

    @Gamieon : It seems that now the zip is not available.
     
  14. Gamieon

    Gamieon

    Joined:
    Mar 20, 2010
    Posts:
    38
  15. Ippokratis

    Ippokratis

    Joined:
    Oct 13, 2008
    Posts:
    1,521
    I hope that you have not misinterpreted me. I am not complaining. I just say that for some reason I cannot download the zip or connect to your web site. This is odd, considering that I tried again 47 minutes after your answer. So either it has to do with your site, or with something else I cannot define.
     
  16. Rush-Rage-Games

    Rush-Rage-Games

    Joined:
    Sep 9, 2010
    Posts:
    1,997
    Try this link. I just downloaded the zip and put it in dropbox...
     
  17. Ippokratis

    Ippokratis

    Joined:
    Oct 13, 2008
    Posts:
    1,521
    Thanks, I have downloaded the updated file now.
     
  18. TheD3vilHimself

    TheD3vilHimself

    Joined:
    Oct 24, 2011
    Posts:
    1
    Seems I'm late to the party. Can anybody post the sample file or is it off-limits now?
     
  19. Rush-Rage-Games

    Rush-Rage-Games

    Joined:
    Sep 9, 2010
    Posts:
    1,997
  20. Gamieon

    Gamieon

    Joined:
    Mar 20, 2010
    Posts:
    38
  21. escapecontrol

    escapecontrol

    Joined:
    Jan 30, 2013
    Posts:
    1
    I know this is like almost 2 years later, but thanks for the zip download! Some nice stuff in there... well done peeps!!