【问题标题】:Unity3D character facing in the direction it’s movingUnity3D 角色面向其移动方向
【发布时间】:2018-05-10 13:08:32
【问题描述】:

我正在制作一个游戏,它包含行星引力,我如何才能让玩家看到它正在移动的方向,如果我可以将它插入到我的移动代码中会很有帮助

using UnityEngine;

public class PlayerMovementScript : MonoBehaviour {

public float moveSpeed;

private Vector3 moveDirection;

void Update()
{
    moveDirection = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical")).normalized;
}

void FixedUpdate()
{
    GetComponent<Rigidbody>().MovePosition(GetComponent<Rigidbody>().position + transform.TransformDirection(moveDirection) * moveSpeed * Time.deltaTime);
}
}

【问题讨论】:

  • 您是否尝试过使用LookAt() 方法?您可以将其传递给您的(moveDirection + gameObject.transform.position),它应该可以工作。
  • 使用Input.GetAxisRaw("Horizontal")或←→来控制方向和Input.GetAxisRaw("Vertical")或↑↓来控制移动是有意义的。
  • @Paul-Jan 该链接显示“没有刚体”。 OP 正在使用刚体。
  • @Programmer 不管标题细节如何,接受的答案还提到了如何使用 RigidBody 执行此操作。但你是对的,删除了关闭建议。

标签: c# unity3d


【解决方案1】:

您可以使用刚体的速度查看您正在移动的方向。

transform.rotation = Quaternion.LookRotation(rb.velocity);

如果您想要平滑过渡:

Quaternion desiredRotation = Quaternion.LookRotation(rb.velocity);
transform.rotation = Quaternion.Slerp(transform.rotation, desiredRotation, Time.deltaTime);

【讨论】:

  • 除了我想旋转播放器而不是相机之外,这有效
  • 这应该旋转播放器,除非您的PlayerMovementScript 连接到相机,这没有多大意义。但是,即使是这种情况,它也应该很容易修复。
  • 可能是我的相机被附加或播放器而不是跟随脚本。
  • 什么意思?基本上只要这个脚本附加到播放器本身,它就可以按预期工作。
【解决方案2】:

假设此脚本已附加到您希望指向其移动方向的对象,请尝试此操作。

void Update()
{
    moveDirection = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical")).normalized;
    Vector3 lookDirection = moveDirection + gameObject.Transform.Position;
    gameObject.Transform.LookAt(lookDirection);
}

因为你的 moveDirection 是标准化的,你必须将它添加到你的当前位置,以便在对象的本地空间中获得 moveDirection。然后你可以LookAt()它指向它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多