【问题标题】:How To Change Third Person Controller Movement如何更改第三人称控制器动作
【发布时间】:2020-05-25 05:38:26
【问题描述】:

我正在使用 Unity 标准资产中的第三人称控制器移动。我想改变运动的方向,比如当我按“W”或“向上箭头键”时它正在向右移动,当我按“D”或“向右箭头键”时它正在向后移动,当我按“S”或“向下箭头键”它向左移动,当我按“A”或“向左箭头键”时它正在向前移动。

移动脚本:

using System;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;

namespace UnityStandardAssets.Characters.ThirdPerson
{
    [RequireComponent(typeof (ThirdPersonCharacter))]
    public class ThirdPersonUserControl : MonoBehaviour
    {
        private ThirdPersonCharacter m_Character; // A reference to the ThirdPersonCharacter on the object
        private Transform m_Cam;                  // A reference to the main camera in the scenes transform
        private Vector3 m_CamForward;             // The current forward direction of the camera
        private Vector3 m_Move;
        private bool m_Jump;                      // the world-relative desired move direction, calculated from the camForward and user input.


        private void Start()
        {
            // get the transform of the main camera
            if (Camera.main != null)
            {
                m_Cam = Camera.main.transform;
            }
            else
            {
                Debug.LogWarning(
                    "Warning: no main camera found. Third person character needs a Camera tagged \"MainCamera\", for camera-relative controls.", gameObject);
                // we use self-relative controls in this case, which probably isn't what the user wants, but hey, we warned them!
            }

            // get the third person character ( this should never be null due to require component )
            m_Character = GetComponent<ThirdPersonCharacter>();
        }


        private void Update()
        {
            if (!m_Jump)
            {
                m_Jump = CrossPlatformInputManager.GetButtonDown("Jump");
            }
        }


        // Fixed update is called in sync with physics
        private void FixedUpdate()
        {
            // read inputs
            float h = CrossPlatformInputManager.GetAxis("Horizontal");
            float v = CrossPlatformInputManager.GetAxis("Vertical");
            bool crouch = Input.GetKey(KeyCode.C);

            // calculate move direction to pass to character
            if (m_Cam != null)
            {
                // calculate camera relative direction to move:
                m_CamForward = Vector3.Scale(m_Cam.forward, new Vector3(1, 0, 1)).normalized;
                m_Move = v*m_CamForward + h*m_Cam.right;
            }
            else
            {
                // we use world-relative directions in the case of no main camera
                m_Move = v*Vector3.forward + h*Vector3.right;
            }
#if !MOBILE_INPUT
            // walk speed multiplier
            if (Input.GetKey(KeyCode.LeftShift)) m_Move *= 0.5f;
#endif

            // pass all parameters to the character control script
            m_Character.Move(m_Move, crouch, m_Jump);
            m_Jump = false;
        }
    }
}

谁能告诉我如何改变这些方向

【问题讨论】:

  • 也许尝试交换 h 和 v 分配:float v = CrossPlatformInputManager.GetAxis("Horizontal"); float h = -1 * CrossPlatformInputManager.GetAxis("Vertical");
  • 感谢@PandaStrong,但现在它正朝着相反的方向发展

标签: c# unity3d


【解决方案1】:


找到这部分代码:

float h = CrossPlatformInputManager.GetAxis("Horizontal");
float v = CrossPlatformInputManager.GetAxis("Vertical");

并交换它们:

float v = CrossPlatformInputManager.GetAxis("Horizontal") * -1;
float h = CrossPlatformInputManager.GetAxis("Vertical") * -1;

更新:为了纠正相反的运动方向,我添加了一个 -1

【讨论】:

  • 感谢@MohammadReza 的回复,但现在角色正在向相反的方向调整,例如当我按下“W”或“向上箭头键”时,它正在向后移动,当我按下“S”或“向下箭头”时键”向前移动,当我按“W”或“向上箭头键”时,它向右移动,当我按“D”或“向右箭头键”时,当我按“A”或“左箭头键”时它向左移动键”它向右移动。请帮帮我
  • 查看答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多