【发布时间】:2020-08-27 09:26:09
【问题描述】:
我正在尝试自己制作一个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。
这是完整的代码。 Joystick 类来自 Fenerax Studios 的 Joystick Pack:
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;
}
}
}
【问题讨论】:
-
你好,只是一个基本的提示。您在“Get3DJoystickPosition”中的代码基本上应该是 inside 更新,而不是相反。您不能自己调用 Update。 Unity 为您调用每一帧。因此,如果您想每帧检查操纵杆,只需在 Update 中实际检查它!希望对您有所帮助!
-
哦,我应该插入图片,因为不是每帧都调用 Get3DJoystickPosition。
-
你不能在任何地方调用更新