這是一個 playerController“操縱桿”腳本的實作,它可以解決 1 個問題,當我在其父影像周圍移動夾板位置時,我的播放器物件會按照您的預期移動。當我旋轉相機時會出現問題,運動沒有考慮相機面對的方向,所以運動幾乎是相反的。我知道我需要參考我的相機當前的前向位置,我只是不確定這需要在下面的腳本中放在哪里,任何提示都會很棒!
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;
}
}
}
uj5u.com熱心網友回復:
用以下內容替換移動方向計算應該可以作業。
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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/449575.html
上一篇:如何使用c#在統一2dAndroid中禁用螢屏特定部分的觸摸?
下一篇:如何在實體化之前獲取預制件大小?
