[英]How to move camera using joystick in Unity?
我在Unity中使用操纵杆进行摄像机移动时遇到问题。 我将此代码写到游戏杆上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class VirtualJoystick : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler {
private Image bgImg;
private Image joystickImg;
private Vector2 pos;
private void Start()
{
bgImg = GetComponent<Image>();
joystickImg = transform.GetChild(0).GetComponent<Image>();
}
public virtual void OnDrag(PointerEventData ped)
{
Vector2 pos;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(bgImg.rectTransform, ped.position, ped.pressEventCamera, out pos))
{
pos.x = (pos.x * 2 + 1) / bgImg.rectTransform.sizeDelta.x;
pos.y = (pos.y * 2 - 1) / bgImg.rectTransform.sizeDelta.y;
pos = (pos.magnitude > 1.0f) ? pos.normalized : pos;
// Move Joystrick IMG
joystickImg.rectTransform.anchoredPosition = new Vector2(pos.x * (bgImg.rectTransform.sizeDelta.x / 3), pos.y * (bgImg.rectTransform.sizeDelta.y / 3));
}
}
public virtual void OnPointerDown(PointerEventData ped)
{
OnDrag(ped);
}
public virtual void OnPointerUp(PointerEventData ped)
{
pos = Vector2.zero;
joystickImg.rectTransform.anchoredPosition = Vector2.zero;
}
public float Horizontal()
{
if (pos.x != 0)
{
return pos.x;
}
else
{
return Input.GetAxis("Horizontal");
}
}
public float Vertical()
{
if (pos.y != 0)
{
return pos.y;
}
else
{
return Input.GetAxis("Vertical");
}
}
}
此代码运行良好,并动态返回Vector2(x,y)。 因此,现在我想使用此操纵杆和这些坐标来移动摄像机(更改位置X,Y)。 你有什么想法吗? 每个人都展示了如何移动立方体或球体,而无处显示如何平移相机...
相机的行为与您平移,旋转,缩放的场景中的任何其他游戏对象的行为相同(不会显示)
因为它具有Transform组件。
这可以通过Translate
功能轻松完成
Camera.main.transform.Translate(pos, Space.World);
您还需要将其乘以数字(速度)和Time.deltaTime
,以确保每个设备上的移动都相同。
因此,代码应如下所示:
private Vector2 pos;
public float moveSpeed = 100f;
然后,在您的OnDrag
或Update
函数中:
Vector3 newPos = new Vector3(pos.x * moveSpeed, pos.y * moveSpeed, 0);
newPos *= Time.deltaTime;
Camera.main.transform.Translate(newPos, Space.World);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.