【问题标题】:Unity3D follow Sphere player camera rotationUnity3D跟随Sphere播放器相机旋转
【发布时间】:2018-11-05 09:55:49
【问题描述】:

您好,我正试图让我的相机在我的玩家 (Sphere) 移动时跟随它。我已经让相机跟随玩家,但是当球体旋转时,相机也会旋转。那不是我要找的。我需要相机保持在球体上并在我转动时旋转。到目前为止,这是我的代码:

编辑:我正在寻找的是你在视频中看到的东西。当球体转动时相机旋转的地方,所以它一直在它后面。 https://www.youtube.com/watch?v=jPAgPQi1l0c

using UnityEngine;
using System.Collections;

public class TransformFollower : MonoBehaviour
{
[SerializeField]
private Transform target;

[SerializeField]
private Vector3 offsetPosition;

[SerializeField]
private Space offsetPositionSpace = Space.Self;

[SerializeField]
private bool lookAt = true;

private void Start()
{
    offsetPosition = new Vector3(-3, -2, 0);
}
private void Update()
{
    Refresh();
}

public void Refresh()
{
    if (target == null)
    {
        Debug.LogWarning("Missing target ref !", this);

        return;
    }

    // compute position
    if (offsetPositionSpace == Space.Self)
    {
        transform.position = target.TransformPoint(offsetPosition);
    }
    else
    {
        transform.position = target.position + offsetPosition;
    }

    // compute rotation
    if (lookAt)
    {
        transform.LookAt(target);
    }
    else
    {
        transform.rotation = target.rotation;
    }
}
}

【问题讨论】:

  • 相机是玩家的孩子吗?
  • 不是,是对象。
  • 您可以尝试将其设为播放器的子级。当然是在层次结构中。

标签: unity3d


【解决方案1】:

你应该实现以下逻辑:

创建一个空的 gameObject:Character,它将作为子对象:Camera、Sphere

当您移动时,您只需变换角色,因此相机和球体的变换方式完全相同。

现在,当您只想旋转球体而不旋转相机时,只需在球体中应用您的旋转(或其他任何东西)。 为此,您可以在脚本中传递角色和球体。 因此,移动变换将应用于角色和任何自定义移动,仅在球体中。

尼克

【讨论】:

    【解决方案2】:

    这段代码是你自己写的吗?

    似乎如果lookat 为真,它会做你想做的事。如果是假的,if 会按照你的描述做。

    只需查看编辑器并选中“查看”框即可。

    如果您不想使用它,可以通过删除 lookat 变量并替换来从代码中删除它

    // compute rotation
    if (lookAt)
    {
        transform.LookAt(target);
    }
    else
    {
        transform.rotation = target.rotation;
    }
    

    通过

    // compute rotation
    transform.LookAt(target);
    

    EDIT更多解释:

    在您的代码中,您有两个选项:lookatoffsetPositionSpace

    基本上,offsetPositionSpace 可以是两个值:

    • Self -> 摄像头始终在玩家身后(如果你旋转玩家,它会移动到身后
    • World -> 摄像头会一直模仿玩家的动作(如果玩家旋转,摄像头不会移动

    LookAt 也可以有两个值

    • true -> 相机始终注视玩家
    • false -> 摄像头模仿玩家旋转(如果玩家旋转,摄像头也会这样做并停止注视玩家)

    【讨论】:

    • 我借了一些,但如果我按照你的建议去做,它仍然会做烦人的跟随旋转,但它只显示玩家背后的相机并且不跟随转弯,它只是保持旋转当球体向右或向左转时。
    • 在您的代码中,您有两个选项:lookatoffsetPositionSpace 。你明白他们在做什么吗? (如果没有,您应该尝试理解它)。我将在我的回答中添加更多解释。如果我在答案中描述的行为不是您所需要的,也许可以尝试在您的问题中更好地解释目标
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    相关资源
    最近更新 更多