编辑脚本使角色在他面对的方向上移动

时间:2016-03-04 04:45:24

标签: c# unity3d unity5 unity3d-5

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

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

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

我收到了一些改变此剧本中某一行的建议,但是随着这些变化,角色会向一个固定的方向前进。 (E.G。:当我用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

2 个答案:

答案 0 :(得分:1)

我想你想要

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

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

 void Update() {
      if (Input.GetKey(KeyCode.W)) {
           transform.position += transform.rotation * Vector3.forward * MOVESPEED;
      }
 }

答案 1 :(得分:0)

我有它的工作。首先看一下图片,它将帮助您正确设置播放器。我的播放器只有两个立方体。我添加了第二个立方体给玩家指向的面孔。我已将这2个多维数据集添加到父对象中,并使用PlayerMovement.cs移动父对象。 enter image description here

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);

        }
    }