首页 > 解决方案 > 有没有办法获得实际的joystick.Vertical 和joystick.Horizo​​ntal 值?

问题描述

我正在尝试自己制作moba游戏。

我想做的是

  1. 传递一个名为 joystick_tag 的参数。(像这样:Get3DJoystickPosition(joystick_tag))
  2. 获取当前的joystick.Horizo​​ntal、joystick.Vertical、Camera.main,这样我就可以计算出值了:
Camera.main.ScreenToWorldPoint(new Vector3((joystick.Horizontal + 1) * Screen.width / 2, (joystick.Vertical + 1) * Screen.height / 2, Camera.main.nearClipPlane));
  1. 返回那个值。

看起来很简单,但在我的代码中,即使我移动了操纵杆,joystick.Horizo​​ntal 和 joystick.Vertical 的值也保持为 0。

基本上,该方法获取一个字符串输入,称为 joystick_tag。然后通过标记,每次调用该方法时,它都会找到一个由标记标记的操纵杆。然后它调用Update() 方法,这样我就可以得到当前的joystick.Horizo​​ntal 和joystick.Vertical。

这是完整的代码。操纵杆类来自 Fenerax Studios 的操纵杆包:

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

namespace Korselo.JoyPos
{
    public class JoyPos : MonoBehaviour
    {
        public Joystick joystick;
        public Vector3 world_v;
        public string joystick_tag_public;
        // Start is called before the first frame update
        void Start()
        {
          
        }

        // Update is called once per frame
        void Update()
        {
            world_v = Camera.main.ScreenToWorldPoint(new Vector3((joystick.Horizontal + 1) * Screen.width / 2, (joystick.Vertical + 1) * Screen.height / 2, Camera.main.nearClipPlane));

            Debug.Log(world_v);
        }

        public Vector3 Get3DJoystickPosition(string joystick_tag)
        {
            GameObject joystickGameObject = GameObject.FindGameObjectWithTag(joystick_tag);
            if (joystickGameObject != null)
            {
                joystick = joystickGameObject.GetComponent<Joystick>();
            }
            Update();
            return world_v;
        }
    }
}

标签: c#unity3djoystick

解决方案


抱歉,您的代码看起来一团糟。我强烈建议您在制作 MOBA 之前先学习一门课程或使用 Unity Learn。你不应该给Update()自己打电话。Unity 自己称之为。回答您的问题,joystick.Horizontaljoystick.Vertical应返回您的实际值。


推荐阅读