Android phone controlls

I’m not 100% sure how to move my char on the phone. Building a shooter app. I have it working for controls and keyboard and mouse. Now I need to get it for touch screens.

code:

 // Update is called once per frame
    void Update()
    {
        //HUD
        _Score.text = Game_Data._Score.ToString();
        _Kill_Count.text = Game_Data._Kill_Count.ToString();

        //Ship Movement
        if (Game_Data._Movement_Use_Mouse)
        {
            TargetFollow = Input.mousePosition;
            TargetFollow = Camera.main.ScreenToWorldPoint(TargetFollow);//Convert Mouse Postion To World Postion

            TargetFollow.z = transform.position.z;
            transform.position = Vector3.Lerp(transform.position, TargetFollow, speed * Time.deltaTime); // Move object to pointer
        }
        else
        {
            rb.AddForce(new Vector2(Input.GetAxis("Horizontal") * speed, 0));
            rb.AddForce(new Vector2(0, Input.GetAxis("Vertical") * speed));
        }

        //Fire Weapon
        if (Game_Data._Semi_Auto_Fire)
        {
            //Mouse
            if (Input.GetMouseButton(0) && !_DelayFire) { Fire_Laser(); }
            if (Input.GetMouseButton(1) && !_DelayFire) { Fire_Laser(); }

            //Keyoard
            if (Input.GetKey(KeyCode.Space) && !_DelayFire) { Fire_Laser(); }

            //Joystick
            if(Input.GetKey(KeyCode.Joystick1Button0) && !_DelayFire) { Fire_Laser(); }
        }
        else
        {
            //Mouse
            if (Input.GetMouseButton(0) && !_DelayFire) { Fire_Laser(); }

            //Keyboard
            if (Input.GetKeyDown(KeyCode.Space) && !_DelayFire) { Fire_Laser(); }

            //Joystick
            if(Input.GetKeyDown(KeyCode.Joystick1Button0) && !_DelayFire) { Fire_Laser(); }
        }
    }

    #region"Phone"
    public void Move_Left()
    {
        rb.AddForce(new Vector2(Input.GetAxis("Horizontal") * speed, 0));
    }

    public void Move_Right()
    {
        rb.AddForce(new Vector2(Input.GetAxis("Horizontal") * speed, 0));
    }

    public void Move_Up()
    {
        rb.AddForce(new Vector2(0, Input.GetAxis("Vertical") * speed));
    }

    public void Move_Down()
    {
        rb.AddForce(new Vector2(0, Input.GetAxis("Vertical") * speed));
    }

    public void Laser()
    {
        if (!_DelayFire) { Fire_Laser(); }
    }
    #endregion

Tried this but still not working

 void Update()
    {
        //HUD
        _Score.text = Game_Data._Score.ToString();
        _Kill_Count.text = Game_Data._Kill_Count.ToString();

        //Ship Movement
        if (Game_Data._Movement_Use_Mouse)
        {
            TargetFollow = Input.mousePosition;
            TargetFollow = Camera.main.ScreenToWorldPoint(TargetFollow);//Convert Mouse Postion To World Postion

            TargetFollow.z = transform.position.z;
            transform.position = Vector3.Lerp(transform.position, TargetFollow, speed * Time.deltaTime); // Move object to pointer
        }
        else if (Input.GetButtonDown("btnArrowRight") || Input.GetButton(KeyCode.D.ToString()))
        {
            transform.position += Vector3.right * speed * Time.deltaTime;
        }
        else if (Input.GetButtonDown("btnArrowLeft") || Input.GetButton(KeyCode.A.ToString()))
        {
            transform.position += Vector3.left * speed * Time.deltaTime;
        }
        else if (Input.GetButtonDown("btnArrowUp") || Input.GetButton(KeyCode.W.ToString()))
        {
            transform.position += Vector3.up * speed * Time.deltaTime;
        }
        else if (Input.GetButtonDown("btnArrowDown") || Input.GetButton(KeyCode.S.ToString()))
        {
            transform.position += Vector3.down * speed * Time.deltaTime;
        }
        else
        {
            rb.AddForce(new Vector2(Input.GetAxis("Horizontal") * speed, 0));
            rb.AddForce(new Vector2(0, Input.GetAxis("Vertical") * speed));
        }

        //Fire Weapon
        if (Game_Data._Semi_Auto_Fire)
        {
            //Mouse
            if (Input.GetMouseButton(0) && !_DelayFire) { Fire_Laser(); }
            if (Input.GetMouseButton(1) && !_DelayFire) { Fire_Laser(); }

            //Keyoard
            if (Input.GetKey(KeyCode.Space) && !_DelayFire) { Fire_Laser(); }

            //Joystick
            if(Input.GetKey(KeyCode.Joystick1Button0) && !_DelayFire) { Fire_Laser(); }
        }
        else
        {
            //Mouse
            if (Input.GetMouseButton(0) && !_DelayFire) { Fire_Laser(); }

            //Keyboard
            if (Input.GetKeyDown(KeyCode.Space) && !_DelayFire) { Fire_Laser(); }

            //Joystick
            if(Input.GetKeyDown(KeyCode.Joystick1Button0) && !_DelayFire) { Fire_Laser(); }
        }
    }

I have a bunch of full touch controls examples in my proximity_buttons repo.

proximity_buttons is presently hosted at these locations:

https://bitbucket.org/kurtdekker/proximity_buttons

https://github.com/kurtdekker/proximity_buttons

If you want to debug the above, I recommend liberally sprinkling Debug.Log() statements through your code to display information in realtime.

Doing this should help you answer these types of questions:

  • is this code even running? which parts are running? how often does it run?
  • what are the values of the variables involved? Are they initialized?

Knowing this information will help you reason about the behavior you are seeing.

This might be useful in additional what what Kurt mentioned.

https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/OnScreen.html

“You can use on-screen Controls to simulate Input Devices with UI widgets that the user interacts with on the screen. The most prominent example is the use of stick and button widgets on touchscreens to emulate a joystick or gamepad.”

do you have code snipets? that would be prefered or review my code and offer direct snippet feedback suggestion

Code is like 10% of the problem. The rest is setup. The best code in the world won’t work if your input is setup wrong.

Glancing at the above code, all I can say is “yeah, looks fine, probably fine, but what data is it processing?”

And THAT cannot be determined without the code running in context.

And guess who here is most-well-positioned to instrument the code in question (perhaps with Debug.Log() statements?) to find where things are failing?

I came up with this for touch screen so far but I’m going to work toward on screen controller i think

//Phone & Touch
        if (WBG_Config._Build == "Phone")
        {
            TargetFollow = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
            transform.position = Vector3.Lerp(transform.position, TargetFollow, speed * Time.deltaTime);
        }