c# - 有没有办法获得实际的joystick.Vertical 和joystick.Horizontal 值?
问题描述
我正在尝试自己制作moba游戏。
我想做的是
- 传递一个名为 joystick_tag 的参数。(像这样:Get3DJoystickPosition(joystick_tag))
- 获取当前的joystick.Horizontal、joystick.Vertical、Camera.main,这样我就可以计算出值了:
Camera.main.ScreenToWorldPoint(new Vector3((joystick.Horizontal + 1) * Screen.width / 2, (joystick.Vertical + 1) * Screen.height / 2, Camera.main.nearClipPlane));
- 返回那个值。
看起来很简单,但在我的代码中,即使我移动了操纵杆,joystick.Horizontal 和 joystick.Vertical 的值也保持为 0。
基本上,该方法获取一个字符串输入,称为 joystick_tag。然后通过标记,每次调用该方法时,它都会找到一个由标记标记的操纵杆。然后它调用Update() 方法,这样我就可以得到当前的joystick.Horizontal 和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;
}
}
}
解决方案
抱歉,您的代码看起来一团糟。我强烈建议您在制作 MOBA 之前先学习一门课程或使用 Unity Learn。你不应该给Update()
自己打电话。Unity 自己称之为。回答您的问题,joystick.Horizontal
并joystick.Vertical
应返回您的实际值。
推荐阅读
- html - HTML的选择/选项上不需要的边距底部
- python - 在不使用用户函数的情况下将图像保存在具有不同名称的 For 循环中 (sckit - Python)
- jquery - 动态创建的元素不改变 CSS 没有第一次点击
- hibernate - Corda 4.1:MappedSchemas 之间的交叉引用
- extjs - beforerender 侦听器中的 SetValue 不更新任何内容
- api - docker 映像无法正常工作或运行
- java - JMockit MockUp 多种方法
- swift - 如何以编程方式更改不同屏幕尺寸的约束?
- contiki - 在 RPL 中,如何在链路层本身阻止某个节点,以便进一步的层不处理来自该节点的数据?
- javascript - 定义替换/更改字符串的位置时出现异常字符