【问题标题】:freezing the y position of the camera in unity3d在unity3d中冻结相机的y位置
【发布时间】:2017-08-05 11:11:45
【问题描述】:

我正在制作一个平台前游戏,我在模仿第一版超级马里奥兄弟的相机移动时遇到了游戏的相机位置问题,但是每次我移动我的角色时,相机都会上升直到角色消失。我该如何解决?

public Transform playerPos;
public Transform rigthCamBoundary;
public Transform levelEnd;

Vector3 destination;
Vector3 velocity = Vector3.zero;

private void Start()
{
    destination = Vector3.ClampMagnitude(levelEnd.position, 22.8f);
    destination = new Vector3(destination.x, destination.y, 13.5f);
}

private void FixedUpdate()
{
    if (Vector3.Distance(playerPos.position, rigthCamBoundary.position) < 13.7f)
        transform.position = Vector3.SmoothDamp(transform.position, levelEnd.position, ref velocity, .14f, 8.5f);
}

【问题讨论】:

  • 您给我们的代码附在相机上还是在哪里?

标签: c# android unity3d camera


【解决方案1】:

要冻结 y 轴,请在游戏运行时获取 y 轴值。使用Vector3.SmoothDamp 后,将 y 轴更改为您之前获得的变量,然后将其应用于您的变换。

public Transform playerPos;
public Transform rigthCamBoundary;
public Transform levelEnd;

Vector3 destination;
Vector3 velocity = Vector3.zero;
float yPos;

private void Start()
{
    destination = Vector3.ClampMagnitude(levelEnd.position, 22.8f);
    destination = new Vector3(destination.x, destination.y, 13.5f);

    //Get the default camera y pos
    yPos = transform.position.y;
}

private void FixedUpdate()
{
    if (Vector3.Distance(playerPos.position, rigthCamBoundary.position) < 13.7f)
    {
        Vector3 tempPos = Vector3.SmoothDamp(transform.position, levelEnd.position, ref velocity, .14f, 8.5f);

        //Apply the default camera y pos
        tempPos.y = yPos;
        transform.position = tempPos;
    }
}

请注意,我不知道此代码是否已附加到相机,但此答案假定它是。否则解决方案仍然保持不变,但您只需将 transform.position.ytransform.position 更改为其他内容。

【讨论】:

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