Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 zlong1 · Oct 02, 2018 at 09:20 AM · c#vector3transform.positionnavigationmovetowards

How do I get one object to move to (the closet) another object?

Hello, I am struggling to get my objects to do what I want them to do. My ultimate goal is to have two groups, Ally and Enemy that are fighting eachother. However, after nearly a week of seeking help, reading, and watching any related thing I can find, I have made very little progress.

Right now I am trying to get Ally to seek-out the nearest Enemy. The method that I have had the most success is was telling one of my objects to seek out others with a certain tag. This worked, but not well. They would rush toward one Enemy, kill it, and then idle. Other Allyobjects would spawn and then rush to another one, kill it, and go idle themselves.

The code for this is:

 using UnityEngine;
 using System.Collections;
 
 public class AlliedAttack : MonoBehaviour
 {
     public float timeBetweenAttacks = 0.5f;
     public int AlliedAttackDamage = 10;
 
     RaycastHit shootHit;
     PlayerShooting playerShooting;
     Animator anim;
     GameObject enemy;
     PlayerHealth playerHealth;
     EnemyHealth enemyHealth;
     bool EnemyInRange;
     float timer;
 
 
     void Awake()
     {
         enemy = GameObject.FindGameObjectWithTag("Enemy");
         enemyHealth = enemy.GetComponent<EnemyHealth>();
         anim = GetComponent<Animator>();
     }
 
 
     void OnTriggerEnter(Collider other)
     {
         if (other.gameObject == enemy)
         {
             EnemyInRange = true;
         }
     }
 
 
     void OnTriggerExit(Collider other)
     {
         if (other.gameObject == enemy)
         {
             EnemyInRange = false;
         }
     }
 
 
     void Update()
     {
         timer += Time.deltaTime;
 
         if (timer >= timeBetweenAttacks && EnemyInRange && enemyHealth.currentHealth > 0)
         {
             Attack();
         }
 
     }
 
 
     void Attack()
     {
         timer = 0f;
 
         if (enemyHealth.currentHealth > 0)
         {
             enemyHealth.TakeDamage(AlliedAttackDamage, shootHit.point);
         }
     }
 }


// // //

 using UnityEngine;
 using System.Collections;
 
 public class AlliedMovment : MonoBehaviour
 {
     Transform enemy;
     EnemyHealth enemyHealth;
     UnityEngine.AI.NavMeshAgent nav;
 
 
     void Update()
 
     {
         enemy = GameObject.FindGameObjectWithTag("Enemy").transform;
         nav = GetComponent<UnityEngine.AI.NavMeshAgent>();
         nav.SetDestination(enemy.position);
     }
 }

// // // My second attempt was to use Vector3.MoveTowards. All I have managed to do with this one is to get my objects to run from one side of the room to the other and sit there. // // using UnityEngine; using System.Collections;

 public class AlliedMovement2 : MonoBehaviour
 {
 
     public Transform target;
 
     public float speed;
 
     void Update()
     {
          transform.position = Vector3.MoveTowards(transform.position, target.transform.position * Time.deltaTime);
          float step = speed * Time.deltaTime;
          transform.position = Vector3.MoveTowards(transform.position, target.position, step);
     }
 }

// // //

Finally, I tried this method:

// //

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class AlliedMovement2 : MonoBehaviour
 {
     public Transform enemy;
     public Transform myTransform;
 
     // Use this for initialization
     void Start () {
         
     }
     
     // Update is called once per frame
     void Update ()
     {
         transform.LookAt(enemy);
         transform.Translate(Vector3.forward * 5 * Time.deltaTime);
     }
 }

It does the exact same thing as my attempt #2, but instead of crossing the entire room, they rush toward the 0, 0 , 0 point and...act strange.

At no point did I manage to figure out how to make my objects find the nearest enemy, either. They sort of just pick the oldest one to spawn and charge it. Could anyone please suggest what I could try or point out what I'm doing wrong?

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

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by Zodiarc · Oct 02, 2018 at 09:36 AM

You can sort the list of enemies (after you got it using tags) by distance using Comparers. Then make your allies go for the first element in the list (aka the closest enemy). After the enemy dies, remove him from the list, resort and make them run for the first element again. Repeat until all enemies are dead (GetGameObjectsWithTag returns an empty list).

Comment
Add comment · Share
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
0

Answer by UnityCoach · Oct 02, 2018 at 10:36 AM

The easiest, although not always giving the most natural looking behaviour, it to use a finite state machine, just like the Animator state machines. Your entity (ally or enemy) will always be in one state and only one, and in each state, it has conditions to transition/switch to other states.

The most common way to define the states is to use enums.

 public enum BehaviourState {Idle, LookingAround, Patrolling, Chasing, Fighting, Fleeing, Dying, Dead}
 private BehaviourState behaviourState;

Then, from Update(), or FixedUpdate(), you can use a switch statement, to trigger actions, and look for conditions to transition to other states.

 void Update()
 {
     switch (behaviourState)
     {
         case BehaviourState.Idle:
             break;
         case BehaviourState.LookingAround:
             LookAround();
             break;
         case BehaviourState.Patrolling:
             Patrol();
             break;
         case BehaviourState.Chasing:
             Chase (lastKnownTarget);
             break;
             // and so on
     }
 }
 
 Chase (Entity target)
 {
     // if target is too far and too fast, look for another one
     if (Vector3.Distance (target.transform.position, transform.position) > givupDistance && target.speed > speed)
         behaviourState = BehaviourState.LookingAround;
 }
Comment
Add comment · Share
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

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

554 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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

Error Vector3 does not contain MoveTowards 3 Answers

How do I make and object's position and rotation independent again? 1 Answer

Adding rotation to Physics.AddForce(); ... Getting weird error? 0 Answers

Get closest Vector3 position from a GameObject and two Transforms (and the line inbetween them) 2 Answers

Multiple Cars not working 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