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 /
This question was closed Apr 12, 2019 at 07:58 PM by unknownuser for the following reason:

The question is answered, right answer was accepted

avatar image
0
Question by unknownuser · Aug 31, 2013 at 01:27 AM · androidguiiosinputinput.getaxis

fixed the problem

problem fixed

Comment
Add comment · Show 1
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 meat5000 ♦ · Aug 31, 2013 at 01:28 AM 0
Share

Check out 'Joystick prefab' and AngryBots tutorial

2 Replies

  • Sort: 
avatar image
0
Best Answer

Answer by citizen_rafiq · Aug 31, 2013 at 09:23 PM

//you need two round texture one for boundary are which is bigger then 2nd texture which will //be touch and drag for controlling

public class JoyStick : MonoBehaviour {

 public Texture areaTexture;
 public Texture touchTexture;
 public Vector2 joystickPosition = new Vector2( 135f,135f);
 public Vector2 speed = new Vector2(2,100);
 public float zoneRadius=100f;
 public float touchSize = 30;
 public float deadZone=20;
 public float touchSizeCoef=0;
 protected Vector2 joystickAxis;
 protected Vector2 joystickValue;
 public Vector2 joyTouch;
 private Vector2 _joystickCenter;
 [SerializeField]
 private Vector2 _smoothing = new Vector2(20f,20f);
 public Vector2 Smoothing {
     get {
         return this._smoothing;
     }
     set {
         _smoothing = value;
         if (_smoothing.x<0.1f){
             _smoothing.x=0.1f;
         }
         if (_smoothing.y<0.1){
             _smoothing.y=0.1f;    
         }
     }
 }
 private int _joystickIndex=-1;
 private bool _enaReset;
 private bool _enaZoom;
 
 void Start () {
     _joystickCenter = joystickPosition;
     _enaReset=false;
 }
 
 // Update is called once per frame
 void Update () {
         if (Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.Android) {
         foreach (Touch touch in Input.touches)
         {
             if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled) {
                 if (_joystickIndex==touch.fingerId){
                     _joystickIndex=-1;
                     _enaReset=true;
                 }
             }
             
             if(_joystickIndex==touch.fingerId){
                 OnTouchDown(touch.position);
             }
             if (touch.phase == TouchPhase.Began) {
                 if (((Vector2)touch.position - _joystickCenter).sqrMagnitude < Mathf.Pow((zoneRadius+touchSizeCoef/2),2)){
                     _joystickIndex = touch.fingerId;
                 }
             }
         }
         
         UpdateJoystick();
         if(_enaReset){
             ResetJoystick();
         }
     }else{ 
         if (Input.GetButtonUp ("Fire1")) {
             _joystickIndex=-1;
             _enaReset=true;
         }
         if(_joystickIndex==1){
             OnTouchDown(Input.mousePosition);
         }
         if (Input.GetButtonDown ("Fire1") ) {
             if (((Vector2)Input.mousePosition - _joystickCenter).sqrMagnitude <Mathf.Pow( (zoneRadius+touchSizeCoef/2),2)){
                 _joystickIndex = 1;
                 
             }
             
         }
         if(_enaReset){
             ResetJoystick();
         }
         
         UpdateJoystick();
     
     }
     
 }
 

 
 
 private void UpdateJoystick(){ 
         if (joyTouch.sqrMagnitude>deadZone*deadZone){
             
             joystickAxis = Vector2.zero;
         if (Mathf.Abs(joyTouch.x)> deadZone){
                 joystickAxis = new Vector2( (joyTouch.x -(deadZone*Mathf.Sign(joyTouch.x)))/(zoneRadius-touchSizeCoef-deadZone),joystickAxis.y);
                 
             }else{
                 joystickAxis = new Vector2( joyTouch.x /(zoneRadius-touchSizeCoef),joystickAxis.y);
             
             }
         if (Mathf.Abs(joyTouch.y)> deadZone){

                 joystickAxis = new Vector2( joystickAxis.x,(joyTouch.y-(deadZone*Mathf.Sign(joyTouch.y)))/(zoneRadius-touchSizeCoef-deadZone));
             }else{
             
                 joystickAxis = new Vector2( joystickAxis.x,joyTouch.y/(zoneRadius-touchSizeCoef));    
             }
         
         }
         else{
             joystickAxis = new Vector2(0,0);
         }
     Vector2 realvalue = new Vector2(  speed.x*joystickAxis.x,speed.y*joystickAxis.y);
     joystickValue=realvalue;
     print(realvalue);

 }

 // Joystick move
 void OnTouchDown(Vector2 position){
         joyTouch  = new Vector2( position.x, position.y) - _joystickCenter;
         if ((joyTouch/(zoneRadius-touchSizeCoef)).sqrMagnitude > 1){
             joyTouch.Normalize();
             joyTouch *= zoneRadius-touchSizeCoef;
         }
     //print(joyTouch);
 }
 
 
 private void ResetJoystick(){
     if (joyTouch.sqrMagnitude>0.1){
         joyTouch = new Vector2( joyTouch.x - joyTouch.x*_smoothing.x*Time.deltaTime, joyTouch.y - joyTouch.y*_smoothing.y*Time.deltaTime);    
     }
     else{
         joyTouch = Vector2.zero;
         _enaReset=false;
     }
 }
 void OnGUI(){
         GUI.DrawTexture( new Rect(_joystickCenter.x -zoneRadius ,Screen.height- _joystickCenter.y-zoneRadius,zoneRadius*2,zoneRadius*2), areaTexture,ScaleMode.ScaleToFit,true);
         GUI.DrawTexture( new Rect(_joystickCenter.x+(joyTouch.x -touchSize) ,Screen.height-_joystickCenter.y-(joyTouch.y+touchSize),touchSize*2,touchSize*2), touchTexture,ScaleMode.ScaleToFit,true);
 }
 

}

Comment
Add comment · Show 2 · 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 citizen_rafiq · Sep 01, 2013 at 02:22 AM 0
Share

you are welcome.('_')

avatar image LimboWorld · Jun 06, 2014 at 09:24 AM 0
Share

unknownuser, would you $$anonymous$$d sharing the line where the joystick's x,z values can be used to translate your object?

citizen_rafiq, I LOVE YOU!!! THAN$$anonymous$$ YOU FOR POSTING THAT A$$anonymous$$AZIGN JOYSTIC$$anonymous$$ SCRIPT!!!!! you have no idea how long I've been searching for this. THAN$$anonymous$$ YOU SO $$anonymous$$UCH!!!

avatar image
0

Answer by fred_gds · Aug 31, 2013 at 01:17 PM

Well would create a GUITexture. And then use something like this

var myButton : GUITexture = GetComponent(GUITexture); //Only if the script is attached to the GUITexture otherwise you'll have to assign it differently

function Update() {

if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began && myButton.HitTest(Input.GetTouch(0).position)) { // do stuff to accelerate //maybe something like this: Accelerate(); }

if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended && myButton.HitTest(Input.GetTouch(0).position)) { // do stuff to decelerate //maybe something like this: Decelerate() } }

function Accelerate() { input = Mathf.Lerp(input, maxInput, Time.deltaTime); //you would need to assign all those variables }

function Decelerate() { input = Mathf.Lerp(input, 0, Time.deltaTime); //I'm not sure on this line }

So I didn't try out the code but this should be what you need.

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

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

Touch Input with Event Trigger. How to handle with it properly. 0 Answers

GUI.TextField - Android: Unfocusing with click instead of Ok-button causes critical error 0 Answers

Input.GetAxis("Vertical") on touch devices. 2 Answers

size of GUI pics too big 1 Answer

Android/IOS First Person Shooter 2 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