-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Hi guys, this is just my feedback, not a graded assessment or a real problem.
As a general rule, my Tactful and Well-Considered Advice® is just that: advice.
Neither my opinions nor I have any impact on your grade, so don't worry about it.
Also, it's a fun interactive checklist! Go for it! Check things off!
-
Get some real fancy ball effects on up in there!
If you add a light and some fancy 3D shimmer to your ball,
you'll know exactly where it is, all day, every day.
You maybe want to put a trail on the ball too, to track your shots. -
Get some dust motes up in there!
This may appear to be some silly irrelevant toy, but it's extremely useful.
It's a title shot outdoors in the ballpark, just like everything by keijiro.
You could use it to faintly indicate the wicket's force-fields,
and you should absolutely use it to alert the player to gravity switches.
It has a velocity parameter, change it with gravity for a cool look.
For vacuum, you may have to hack it so it converges, maybe time = -time?
I can't think of anything better to indicate depth than dust motes. -
Gotta get that Spaceship HDR Bloom glow happening in here!
Good old Channel Nº 3: PostProcessing, the Space Station essential.
The radius of the bloom effect is proportional to emissive intensity,
so if you want something to really stand out, crank it way up. -
Did you know that
OnTriggerStaycan be run as a coroutine?
I think your physics woes stem from their being reduced to atomic events,
whereas the interaction should be taking place over a span of time.
You could kill two birds with one stone and also apply haptics here, too.IEnumerator OnTriggerStay(Collider other) { while (other.attachedRigidbody?.name=="Ball") { yield return new WaitForFixedUpdate(); // apply haptics over time // intensity => 0 as t0+dt => t0+n for n second delay // apply forces to the ball multiplied by fixedDeltaTime // maybe realign ball velocity to mallet forward // play sound or maybe restart or stop sound, play with volume // maybe pitch depends on how orthogonal the mallet is // maybe play a "great hit" sound if they're really lined up } }
-
Template Strategy Software Design Pattern +
AnimationCurves!
I'll cover more about software design soon, but for user testing,
you should set up a bunch of profiles and see what works best.
The animation curves can be serialized in the editor, i.e.,
they can be stored in aScriptableObjectand changed at runtime.
Generalize your physics computation as a functiondelegatetype,
so that you can swap out different algorithms on the fly.
The following is definitely for example purposes only.// define your delegate type delegate void CroquetPhysicsAlgorithm( Vector3 ballPosition, Vector3 ballVelocity, Vector3 ballAngularVelocity, Vector3 malletVelocity, Vector3 malletForward, ... AnimationCurve ballHitForceResponseCurve, AnimationCurve whateverElseCurve); ... // map from identifiers to functions to swap in and out Dictionary<string,CroquetPhyicsAlgorithm> algorithms = new[] { // fancy C#6 dictionary syntax, enable .NET 4.6 preview! ["MyAlgorithm"] = new CroquetPhysicsAlgorithm(MyAlgorithm), ["LambdaAlgorithm"] = (bP, bV, ...) => SomeOtherComputation(2*vB)*mV, ... ["LastTry"] = new CroquetPhysicsAlgorithm(LastTryVariationFinal2) }; // current function to be called from physics CroquetPhysicsAlgorithm CurrentAlgorithm = MyDefaultAlgorithm; ... // calling the currently selected function void OnCollision(Collision o) { CurrentAlgorithm(ball.position, ball.velocity, ... CurrentForceCurve); }