Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Sasmaster · May 16, 2015 at 05:36 PM · scripting problem

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:

alt text

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.

blendtreescreenshot.png (51.8 kB)
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

19 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

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


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges