【问题标题】:Edit Script To Make Character Move In Direction He Is Facing编辑脚本以使角色朝他面对的方向移动
【发布时间】:2016-03-04 14:01:10
【问题描述】:

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

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

在原始脚本中,角色会相对于摄像机朝向的方向向前移动。

我收到了一些建议来更改此脚本中的一行,但随着更改,角色会朝着一个固定的方向前进。 (例如:当我用 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

【问题讨论】:

    标签: c# unity3d unity5 unity3d-5


    【解决方案1】:

    我想你想要

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

    一个完整的代码块应该是这样的......

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

    【讨论】:

    • 我很抱歉,但我对编码还很陌生,仍处于初学者学习阶段。我应该在哪里插入该代码?
    • 查看更新后的答案。将您的 MOVESPEED 设置为 0.1
    • 我应该提到我正在使用来自 Unity Asset Store 的 Opsive 的第三人称控制器。这是控制器脚本的链接:docs.google.com/document/d/…
    【解决方案2】:

    我已经让它工作了。首先看一下图片,它将帮助您正确设置播放器。我的播放器只有两个立方体。我添加了第二个立方体来为玩家指向的位置提供一个面孔。我已将这 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);
    
            }
        }
    

    【讨论】:

    • 对不起,我认为我在 OP 中没有很好地解释这种情况。我正在使用 Opsive 提供的完整的第三人称控制器套件,在 Asset Store 上购买。它相当复杂,可以控制动画、交互、能力,例如爬架、攀爬和游泳、损坏、库存、移动、输入,基本上所有的东西。我通过谷歌文档编辑了原始帖子以包含 ControllerHandler.cs 脚本。我需要做的是更新包含的脚本以获得所需的结果而不会破坏任何东西。感谢您的回复。非常感谢任何帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2020-02-22
    • 2016-10-29
    相关资源
    最近更新 更多