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 /
  • Help Room /
avatar image
0
Question by GreenEyedMan · Oct 17, 2017 at 03:48 AM · c#mobile

Touch Controls to make an object interested in another object

OK, so I am working on a mobile game idea and yes I am pretty new to programming, but I want to learn!

Anyways I have this game where a character will follow another but I want the character to lose interest in following over time and have the player tap the character to keep it interested in following.

Maybe this is just way out of my understanding, but hey figure I would give it a shot!

So far here is my code for the character to notice another character near it and begin following it:

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class Follow : MonoBehaviour {

 public Transform player;

 // Use this for initialization
 void Start () {
     
 }
 
 // Update is called once per frame
 void Update ()
 {
     if(Vector3.Distance(player.position, this.transform.position) < 10) // 10 is the distance before noticing.
     {
         Vector3 direction = player.position - this.transform.position;
         direction.y = 0;

         this.transform.rotation = Quaternion.Slerp(this.transform.rotation,
                                     Quaternion.LookRotation(direction), 0.1f);

         if(direction.magnitude > 5)
         {
             this.transform.Translate(0, 0, 0.05f);
         }

     }
     
 }

}

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
0
Best Answer

Answer by JoeriVDE · Oct 18, 2017 at 08:34 PM

Your follow code is written well for a new programmer :)

Tested this and it worked. Also added a little cooldown feature. If anything's unclear feel free to ask! Cheers

 public class Follow : MonoBehaviour {
 
     public Transform player;
 
     enum CharacterStates {
         INTERESTED,
         NOT_INTERESTED,
         COOL_DOWN
     }
 
     // track the character interested state
     CharacterStates _characterState = CharacterStates.NOT_INTERESTED;
 
     // Timer for keeping track of how long the character has been interested
     float _interesetedTimer;
     // the time before the character loses interest
     public float loseInteresetThreshold = 10f;
 
     void Update() {
         switch (_characterState) {
             case CharacterStates.NOT_INTERESTED:
                 // If the character is not interested and the distance between it and the player is 10, it changes the state to interested
                 if (Vector3.Distance(transform.position, player.position) < 10f) {
                     _characterState = CharacterStates.INTERESTED;
                 }
                 break;
             case CharacterStates.INTERESTED:
                 // our character is now interested  and will follow the player, the 'interest' timer starts running
                 _interesetedTimer += Time.deltaTime; // add the time since the last frame to our timer
 
                 // check if we're over the intereseting time threshold
                 if (_interesetedTimer < loseInteresetThreshold) {
                     // If not, we update the character position and rotation
                     Vector3 direction = player.position - transform.position;
                     // only do this if there is no terrain height difference
                     direction.y = 0;
 
                     this.transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), 0.1f);
 
                     if (direction.magnitude > 5) {
                         this.transform.Translate(0, 0, 0.05f);
                     }
                 } else {
                     // The interested time limit has been reached!
                     // Reset the timer
                     _interesetedTimer = 0;
 
                     // Go to interest cooldown mode
                     StartCoroutine("CoolDownInterest");
                 }
                 break;
         }
     }
 
     // Cooldown Ienumator
     IEnumerator CoolDownInterest() {
         // Character is on interest cooldown now
         _characterState = CharacterStates.COOL_DOWN;
         // Wait for 5 seconds -> cooldownTime and then reset character state to 'not interested'
         yield return new WaitForSeconds(5f);
         _characterState = CharacterStates.NOT_INTERESTED;
     }
 
     // The method to re-awaken the character's interest i.e. when you tap it
     // This used to be OnCharacterTapped
     void OnMouseDown() {
         // only execute if the character was interested or is on interest cooldown
         if(_characterState == CharacterStates.INTERESTED || _characterState == CharacterStates.COOL_DOWN) {
             //Only re-enable if the character is still within range
             if (Vector3.Distance(transform.position, player.position) < 10f) {
                 // stop the cooldown if there is any running
                 StopCoroutine("CoolDownInterest");
                 // reset the interested timer
                 _interesetedTimer = 0;
                 _characterState = CharacterStates.INTERESTED;
             }            
         }
     }
 }
Comment
Add comment · Show 3 · 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 GreenEyedMan · Oct 18, 2017 at 09:04 PM 0
Share

This is incredible!! Holy cow thank you so much! The cooldown feature is brilliant!

The only thing I cant quite figure out is how to tap to re interest. I see the code at the bottom for it , would I just change the

OnCharacterTapped to OnNameofobjectTapped?

I'm even more new to mobile game stuff and don't fully understand the codes for tap controls.

avatar image JoeriVDE GreenEyedMan · Oct 18, 2017 at 09:27 PM 0
Share

Np, glad I could be of use :)

Replaced the CharacterTapped() by On$$anonymous$$ouseDown(). If you add a collider to your character gameObject it should execute that method when you click on it and should also work for touch input on mobile platforms if i'm not mistaken.

I made the nethod public because I assumed you already had a touch input script that registered when your pointer/finger touched the character. All you had to do then was call CharacterTapped() when it did.

Touch controls are not that easy to write, but Unity offers great tutorials and great 3rd party plugins to make that a whole lot easier for you. :) A great free touch input control plugin is TouchScript.

Good luck!

avatar image GreenEyedMan JoeriVDE · Oct 18, 2017 at 09:35 PM 0
Share

Awesome! Thanks for your help man I really appreciate it!

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

465 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

Related Questions

Mobile game screen orientation 0 Answers

Why does my script and collider2D automatically deactivate after reloading the scene? 0 Answers

Cannot Jump while moving, using Touch Controls for Android 1 Answer

Is it possible to access the native step-counter on mobile platforms. 2 Answers

Delayed jump on android 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