[英]Unity - Joystick Controller - Camera Problem
这是 playerController“操纵杆”脚本的一个实现,它工作正常,但有 1 个问题,当我围绕其父图像移动夹紧垫 position 时,我的播放器 object 移动如您所料。 当我旋转相机时出现问题,移动没有考虑相机面对的方向,所以运动几乎是相反的。 我知道我需要参考我的相机当前前向 position,我只是不确定这需要在下面的脚本中放在哪里,任何提示都很棒!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class PlayerMovement : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler
{
public Transform player;
Vector3 move;
public float moveSpeed;
private Transform cameraTransform; //ref to main camera, then needs to manipulate the direction somehow.
public RectTransform pad;
private void Start()
{
cameraTransform= Camera.main.transform;
}
public void OnDrag(PointerEventData eventData)
{
transform.position = eventData.position;
transform.localPosition =
Vector2.ClampMagnitude(eventData.position - (Vector2)pad.position, pad.rect.width * 0.5f);
move.y = 0;
move = (cameraTransform.forward * transform.localPosition.x + cameraTransform.right * transform.localPosition.z).normalized;
}
public void OnPointerUp(PointerEventData eventData)
{
transform.localPosition = Vector3.zero;
move = Vector3.zero;
StopCoroutine("PlayerMove");
}
public void OnPointerDown(PointerEventData eventData)
{
StartCoroutine("PlayerMove");
}
IEnumerator PlayerMove()
{
while(true)
{
player.Translate(move * moveSpeed * Time.deltaTime, Space.World);
if (move!= Vector3.zero)
player.rotation = Quaternion.Slerp(player.rotation, Quaternion.LookRotation(move), 5* Time.deltaTime);
yield return null;
}
}
}
用以下内容替换移动方向计算应该可行。
move = (cameraTransform.forward * transform.localPosition.x + cameraTransform.right * transform.localPosition.z).normalized;
要理解为什么这有效,请记住您的默认前向是 Vect3(1.0, 0.0, 0.0) 并且您的正确方向是 Vect3(0.0, 0.0, 1.0) 这意味着只要我们不转向,我们就会得到您的原始计算。 一旦我们开始转动,我们基本上将垫移动旋转我们旋转的 y 角度。
如果您的玩家不应该在 y 轴上移动,请确保在标准化之前将移动向量的 y 分量设置为 0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.