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 ms2318 · Apr 19, 2014 at 05:34 AM · javascriptvector3slerpartificial intelligence

How can I create a follower Ai which is restricted on the Y Axis?

Hello, This is my first attempt at creating any Ai in unity and would like to make it simply follow me if I approach it. However, I cannot prevent the Ai from flying through the air to follow me as it is rotating to find my position. This is the code I am currently using.

     var target : Transform; //the enemy's target
     var moveSpeed = 3; //move speed
     var rotationSpeed = 3; //speed of turning
     var range : float=10f;
     var range2 : float=10f;
     var stop : float=0;
     var myTransform : Transform; //current transform data of this enemy
     function Awake()
     {
         myTransform = transform; //cache transform data for easy access/preformance
     }
      
     function Start()
     {
          target = GameObject.FindWithTag("Player").transform; //target the player
      
     }
      
     function Update () {
         //rotate to look at the player
         var distance = Vector3.Distance(myTransform.position, target.position);
         if (distance<=range2 &&  distance>=range){
         myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
         Quaternion.LookRotation(target.position
 - myTransform.position), rotationSpeed*Time.deltaTime);
         }
      
      
         else if(distance<=range && distance>stop){
      
         //move towards the player
         myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
         Quaternion.LookRotation(target.position
 - myTransform.position), rotationSpeed*Time.deltaTime);
         myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
         }
         else if (distance<=stop) {
         myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
         Quaternion.LookRotation(target.position
 - myTransform.position), rotationSpeed*Time.deltaTime);
         }
      
      
     }

If you know of any way I can prevent if from rotating on the Y - Axis while looking for the player please let me know.

Thanks in advance

Comment
Add comment · Show 2
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
avatar image getyour411 · Apr 19, 2014 at 05:41 AM 0
Share

One problem is the reassignment of transform.position to do your 'move' which ignores physics and colliders. Does your enemy unit have a rigidbody or a character controller/motor?

You could try this for look

 Vector3 lookDir = (target.position - myTransform.position);
 lookDir.y =0;
 myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quarternion.LookRotation(lookDir), rotSpeed*Time...)

I do C# so you'll have to convert it I think it's just lookDir : Vector3 = (.....)

avatar image ms2318 · Apr 19, 2014 at 10:32 PM 0
Share

Thanks for the response but after implementing this many glitches still occur when the Ai gets close to the player. When it gets up close the Ai rotates and flies around the player while in the inspector it still says the y is 0. Any suggestions?

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

20 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 avatar image

Related Questions

Help with my Flocking Algorithm 0 Answers

how to create a waypoint? 2 Answers

Javascript - find a value in an array 0 Answers

Respawn when a character hits an object with a tag of "Kill" , but after 3 deaths the controller is destroyed 0 Answers

Moving the player toward a direction 1 Answer


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