• 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 H3yPlaya · Nov 26, 2018 at 10:10 PM · c#enemy aimouseclick

Starcraft Styled Game

So I am trying to make a starcraft styled game, everything is going well so far, except for my Workers(Kinda like scv's). When I click on one of them, they all get selected. I don't know how to fix that, so only one of them gets selected. here's my code:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.AI;
 
 public class WorkerBehaviour : MonoBehaviour {
 
     public NavMeshAgent PlayerAgent;
     public LayerMask GroundLayer;
     public float TurningSpeed = 0.1f;
     public float Speed = 1.0f;
     public GameObject ParticleEffect;
 
     private bool Selected = false;
     private Camera Cam;
     private bool Move = false;
     private GameObject ParticleObject;
 
     void Awake() {
         Cam = Camera.main;
     }
 
     void Update () {
         Vector3 mouseWorldPosition = -Vector3.one;
 
         Ray ray = Cam.ScreenPointToRay(Input.mousePosition);
         RaycastHit hit;
 
         if (Physics.Raycast(ray, out hit)) {
             if (Input.GetMouseButtonDown(0)) {
                 if (hit.transform.tag == "Worker") {
                     if (!Selected) {
                         print(hit.transform.name + " Was Selected");
                         Move = false;
                         Selected = true;
                     }
                 } else {
                     Selected = false;
                 }
             }
 
             if (Input.GetMouseButtonDown(1)) {
                 if (Selected) {
                     if (hit.transform.tag == "Floor") {
                         Move = true;
                     }
                 } else {
                     Move = false;
                 }
 
                 if (Move) {
                     Destroy(ParticleObject);
                     PlayerAgent.SetDestination(GetPointUnderCursor());
                     PlayerAgent.speed = Speed;
                     PlayerAgent.angularSpeed = TurningSpeed;
                 }
             }
         }
     }
 
     Vector3 GetPointUnderCursor() {
         Vector3 mouseWorldPosition = -Vector3.one;
 
         Ray ray = Cam.ScreenPointToRay(Input.mousePosition);
         RaycastHit hit;
 
         if (Physics.Raycast(ray, out hit, 100f, GroundLayer)) {
             mouseWorldPosition = hit.point;
         }
 
         ParticleObject = Instantiate(ParticleEffect, new Vector3(mouseWorldPosition.x, mouseWorldPosition.y + 0.1f, mouseWorldPosition.z), Quaternion.Euler(90, 0, 0));
 
         Destroy(ParticleObject, 3);
 
         return mouseWorldPosition;
     }
 }
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

1 Reply

· Add your reply
  • Sort: 
avatar image
2
Best Answer

Answer by ShadyProductions · Nov 26, 2018 at 10:17 PM

Because it's a mouse event, it is triggered on all your workers. Which sets selected to true on all workers. You'll have to figure out a better way of doing this. Like checking which worker you're actually clicking on.

So instead of setting selected = true on the main class Get the workerbehaviour class from the hit and set the selected on that class to true.

              if (hit.transform.tag == "Worker") {
                  var workerClass = hit.GetComponent<WorkerBehaviour>();
                  if (workerClass != null && !workerClass.Selected) {
                      print(hit.transform.name + " Was Selected");
                      Move = false;
                      workerClass.Selected = true;
                  }
              }

You get the idea.. You'll have to make selected a public bool.

Comment
Add comment · Show 8 · 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 H3yPlaya · Nov 26, 2018 at 10:19 PM 0
Share

I see what you are saying, but not fully sure on how to do so.

avatar image H3yPlaya · Nov 26, 2018 at 10:28 PM 0
Share

WOW! A$$anonymous$$AZING! It worked. Now, I tested it, and it worked, but how do I set Selected to False, when I click on a different worker, but not the one that is selected. So basically, there are 3 workers, and 1 is selected, if I click on the one that is selected, noting should happen, but if I select the either ones, the one I clicked should be Selected while the one that was selected is deselected.

avatar image H3yPlaya · Nov 26, 2018 at 10:36 PM 0
Share

@ShadyProductions Is that easy to do? or should I try doing it myself?

avatar image ecv80 H3yPlaya · Nov 26, 2018 at 11:04 PM 0
Share

Should be easy, try to figure it out. Either keep a reference to your current selection (better, I think), and deselect it before selecting a new one, or check all objects to check what's currently selected to deselect it before selecting your new one (worse, I think). Hint: You want to make it static to be able to access it from any of your WorkerBehaviours: public static WorkerBehaviour currentlySelected; This is assu$$anonymous$$g only one can be selected at a time.

avatar image ShadyProductions H3yPlaya · Nov 27, 2018 at 02:45 PM 0
Share

$$anonymous$$aybe you should abstract this a bit more and split the mouse handling behaviour into a $$anonymous$$ouse$$anonymous$$anager script, and keep the WorkerBehaviour as a simple class that each worker has, this will complicate it a lot less. And as ecv80 has said, you should be able to keep a reference to the previous selected WorkerBehaviour.

avatar image H3yPlaya · Nov 27, 2018 at 12:31 AM 0
Share

@ecv80 hmm, I don't understand what you mean. could you show me some code?

avatar image ecv80 H3yPlaya · Nov 27, 2018 at 07:26 AM 0
Share

Something like this:

 public class WorkerBehaviour : $$anonymous$$onoBehaviour {
 ...
 
 public static WorkerBehaviour currentSelection;
 
 
     void Update () {
     ...
         if (Physics.Raycast(ray, out hit)) {
             if (Input.Get$$anonymous$$ouseButtonDown(0)) {
                 if (hit.transform.tag == "Worker") {
                   var workerClass = hit.GetComponent<WorkerBehaviour>();
                   if (workerClass != null && !workerClass.Selected) {
                       //Deselect current selection
                         if (currentSelection!=null)
                             currentSelection.Selected=false;
                     //Select new
                       print(hit.transform.name + " Was Selected");
                       $$anonymous$$ove = false;
                       workerClass.Selected = true;
                       currentSelection=workerClass;
                   }
                 } else {
                 //Deselect current selection
                     if (currentSelection!=null) {
                         currentSelection.Selected=false;
                         currentSelection=null;
                     }
                 Selected = false;    //Not sure about this
                 }
              }
         ...
          }
     }
 
 }
 
 
avatar image H3yPlaya · Nov 27, 2018 at 09:26 PM 0
Share

Actually, I figured it out my self. I just need to do this: if (hit.transform.tag == "Worker") { var workerClass = hit.transform.GetComponent();

                     -->Selected = false;<--
                     if (workerClass != null && !workerClass.Selected) {
                         print(hit.transform.name + " Was Selected");
                         workerClass.$$anonymous$$ove = false;
                         workerClass.Selected = true;
                         Clicked();
                     }
                 }

I just needed to make everything deselect when I click, and after that what ever I clicked, will be selected.

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

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

Related Questions

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

Flipping 2d Enemy 1 Answer

An OS design issue: File types associated with their appropriate programs 1 Answer

Enemy Movement Problem! 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