-1

我正在使用 Opsive 的第三人称控制器资产。它是一个相当复杂的第三人称控制器,可以控制动画、损坏、移动、输入等。 http://opsive.com/assets/ThirdPersonController/documentation.php

我想更新 ControllerHandler.cs 脚本以使角色朝着角色所面对的方向移动,而不管相机方向如何。(以旧生化危机游戏的风格)

在原始脚本中,角色将相对于相机所面对的方向向前移动。

我收到了一些建议来更改脚本中的一行,但是随着更改,角色会朝着一个固定的方向前进。(EG:当我用 D 键向右转,然后按 W 向前移动时,角色会回到原来面对的方向并朝那个方向移动。)

这是脚本的原始部分:

#if ENABLE_MULTIPLAYER
            if ( isLocalPlayer) {
#endif
            if (m_Controller.Movement == RigidbodyCharacterController.MovementType.Combat || m_Controller.Movement == RigidbodyCharacterController.MovementType.Adventure) {
                m_LookRotation = m_CameraTransform.rotation;

这是有人告诉我将其更改为:

#if ENABLE_MULTIPLAYER
            if ( isLocalPlayer) {
#endif
            if (m_Controller.Movement == RigidbodyCharacterController.MovementType.Combat || m_Controller.Movement == RigidbodyCharacterController.MovementType.Adventure) {
                m_LookRotation = Quaternion.Euler(PlayerInput.GetAxisRaw(Constants.YawInputName), 0, 0);

不幸的是,这并没有达到我想要的结果。

任何帮助将不胜感激。谢谢!

这是控制器脚本的链接: https ://docs.google.com/document/d/1B4sstqtCqRMCLuHuxEuA9I7tO_3W4aHqEZwr73uFDjY/edit?usp=sharing

4

2 回答 2

1

我想你想要

 transform.position += transform.rotation * Vector3.forward;

一个完整的代码块看起来像这样......

 void Update() {
      if (Input.GetKey(KeyCode.W)) {
           transform.position += transform.rotation * Vector3.forward * MOVESPEED;
      }
 }
于 2016-03-04T04:48:24.807 回答
0

我已经让它工作了。首先看一下图片,它将帮助您正确设置播放器。我的播放器只有两个立方体。我添加了第二个立方体来为玩家指向的位置提供一个面孔。我已将这 2 个立方体添加到父对象中,并使用PlayerMovement.cs.在此处输入图像描述

public float rotSpeed;
public float playerSpeed;

    void Update()
    {
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.Rotate( Vector3.up,  Time.deltaTime * rotSpeed);
        } else if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.Rotate(-Vector3.up, Time.deltaTime * rotSpeed);
        }
        if (Input.GetKey(KeyCode.UpArrow))
        {
            transform.Translate(Vector3.forward * Time.deltaTime * playerSpeed);
        } else if (Input.GetKey(KeyCode.DownArrow))
        {
            transform.Translate(-Vector3.forward * Time.deltaTime * playerSpeed);

        }
    }
于 2016-03-04T05:31:38.687 回答