【问题标题】:Change camera position when following player in unity统一跟随玩家时更改相机位置
【发布时间】:2019-10-28 21:15:24
【问题描述】:

我在 Unity 3D 中创建了一个行走角色,我观看了一个教程来制作一个让玩家跟随相机的脚本,这很好,但我希望相机做得更低并向后旋转更多,以便相机可以看到更多的世界,因为现在没有多少可见的通过玩家。我附上了一个链接,指向它现在的样子。

https://i.imgur.com/jQ6efAJ.png 如您所见,您看不到播放器前面的大部分内容。

接下来我将附上脚本,希望您能告诉我需要添加或更改哪些代码才能使我的更改成为可能。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class CameraFollow : MonoBehaviour
{
public Transform playerObject;

public float distanceFromObject = 6f;
void Update()
{
    Vector3 lookOnObject = playerObject.position - transform.position;
    lookOnObject = playerObject.position - transform.position;
    transform.forward = lookOnObject.normalized;

    Vector3 playerLastPosition;
    playerLastPosition = playerObject.position - lookOnObject.normalized * distanceFromObject;

    playerLastPosition.y = playerObject.position.y + distanceFromObject / 2;
    transform.position = playerLastPosition;
}

提前感谢您帮助我。这是一个学校项目,所以我真的希望你的解决方案很棒,迫不及待地想收到你的来信!

【问题讨论】:

    标签: c# unity3d camera


    【解决方案1】:

    您正在考虑为相机添加相对于相机观察位置的偏移量。您需要做的是在将playerObject.position 分配给lookOnObject 时抵消它。

    添加一个新的vector3并将其命名为lookOffset。现在它将变为lookOnObject = (playerObject.position + lookOffset) - transform.position。它将充当您相机的俯仰控制。

    使用distanceFromObject控制相机的z轴位置。

    [编辑]

    这是我修改后的脚本。如上所述,您需要偏移相机将要看到的位置。在这个脚本中,我使用了 float,而不是 Vector3:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;`
    
    public class CameraFollow : MonoBehaviour
    {
        public Transform playerObject;
    
        //Controls the pitch of the camera where it rotates
        //in X axis
        public float pitchOffset = 0;
    
        //Controls the yaw of the camera where it rotates
        //in Y axis
        public float yawOffset = 0;
    
        public float distanceFromObject = 6f;
        void Update()
        {
            //Creation of the look offset relative to the
            //Observable position
            Vector3 lookOffset = playerObject.position;
            lookOffset.y += pitchOffset;
            lookOffset.x += yawOffset;
    
            Vector3 lookOnObject = playerObject.position - transform.position;
            //Replaced playerObject.position with lookOffset
            lookOnObject = lookOffset - transform.position;
            transform.forward = lookOnObject.normalized;
    
    
            Vector3 playerLastPosition;
            //Replaced playerObject.position with lookOffset
            playerLastPosition = lookOffset - lookOnObject.normalized * distanceFromObject;
    
            playerLastPosition.y = playerObject.position.y + distanceFromObject / 2;
            transform.position = playerLastPosition;
        }
    }
    

    可以使用 Vector3 或 Vector2 来完成,您将 pitchOffset 和 yawOffset 存储到 x 和 y 字段。

    【讨论】:

    • 嗨!我对 C# 真的很陌生,所以如果你能为我添加它,我将不胜感激,因为我遇到的问题是你不能为 Vector3 分配整数或浮点值(至少我不是这样)一直在做)。 Vector3lookOffset = 3;
    • 脚本太长,所以我编辑了我的答案。请随意查看。
    猜你喜欢
    • 2015-12-12
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多