繁体   English   中英

统一 - 操纵杆 Controller - 相机问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM