- Home /
Aim angle offset system with animation Blend trees
I have bots who fire at other bots.Now,because the body animation that is responsible to hold a weapon produces some default direction offset of the weapon to its target I need to correct that.I have additive animation layer which impacts only the upper body of the bot and rotates it left,right ,up,down based on the horizontal and vertical angle inputs. The Blend Tree looks like this:
Next.Inside a script attached to the bot character I calculate angle difference around Y axis (for horizontal angle offset) and around X axis (for vertical angle offset).Then I pass those into the animator on each frame.
//transform the target pos into weapon's local space: Vector3 localTarget = m_weaponTrfm.InverseTransformPoint(m_target.position);
//angle around Y axis
targetAngleAroundY = Mathf.Atan2(localTarget.x, localTarget.z) * Mathf.Rad2Deg;
//angle around X axis
targetAngleAroundX = Mathf.Atan2(localTarget.y, localTarget.z) * Mathf.Rad2Deg;
m_animator.SetFloat(horOffsetHash, targetAngleAroundY , Time.deltaTime * m_rotSpeed, Time.deltaTime);
m_animator.SetFloat(verOffsetHash, targetAngleAroundX, Time.deltaTime * m_rotSpeed, Time.deltaTime);
The problem is that the constant update causes the animator to stay quite idle because on each frame the distance between current weapon direction and the desired one decreases until it approximates to zero because the new angle diff is calculated based on the current weapon position which has undergone transformation by the animation.So basically,unless the angles calculation is performed only once,the animator does nothing.I could potentially call the angles recalculation once in some time interval and cache the resulting angle values till the next update call.But there are 2 problems with that: 1)It takes time to the transitions of the animations to complete so it may happen that the weapon default transform is still in the middle of some animation transition and therefore is not really at its default position.2)The enemy and the bot are dynamic so if not updating frequently enough the firing precision may degrade considerably if they move fast.
This problem really seems as simple but I can't figure out a simple way to cache the correct angles diff without it begin overwritten by the next frame calculations.
Your answer
Follow this Question
Related Questions
Make a sprite have the same color as the main light of the scene 1 Answer
Why do changes to a mesh persist until I restart Unity 1 Answer
playerprefs spawning errors. 1 Answer
Use vim with unity? 1 Answer
2D game kit Door isn't opening 3 Answers