如何使相机从后面跟随滚球?

时间:2019-10-29 13:44:13

标签: c# unity3d

我正在使用unity 2018.3.5f1,因此该问题的一些解决方案不起作用。

从Roll-A-Ball演示项目开始,我想扩展摄影机脚本以跟随播放器,同时还要跟踪运动方向。例:如果球开始向侧面移动,我需要摄像机绕着玩家的轴旋转以定位在他的身后,然后开始跟随他。

我尝试使相机成为我要控制的球的孩子,并且尝试制作脚本,但是它无法正确跟随球,因此会不断旋转相机和球(i' m使用这段代码并尝试对其进行修改,因为它是唯一可行的代码)

这是我目前的代码:

Activity

我了解为什么它会旋转,但是没有进行任何研究都无法帮助我找到如何锁定相机的方法,以便相机始终在球的后方

2 个答案:

答案 0 :(得分:1)

如果您希望在跟随球时,摄像机应该跟随相同的摄像机角度(类似于Temple Run),请尝试以下代码:

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

public class CompleteCameraController : MonoBehaviour
{
    public Transform Player;
    public float distanceFromObject = 3f;
    void Update()
    {
        Vector3 lookOnObject = Player.position - transform.position;
        lookOnObject = Player.position - transform.position;
        transform.forward = lookOnObject.normalized;
        Vector3 playerLastPosition;
        playerLastPosition = Player.position - lookOnObject.normalized * distanceFromObject;
        playerLastPosition.y = Player.position.y + distanceFromObject / 2;
        transform.position = playerLastPosition;
    }

当球向左或向右移动时,摄像头将跟随球向相同的角度移动。

答案 1 :(得分:0)

您是否尝试过对相机添加一些限制?如果只想跟随球转动,则可以冻结2轴(x和z)的位置,并且只能让摄像机绕球的y轴旋转。

您可以随意使用检查器上的约束,或在相机脚本中使用GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotationX;

(编辑)抱歉,如果gameObject具有刚体,这是您要执行的操作,但是如果它没有刚体,则想法是相同的。

设置摄像机的位置或旋转角度时,请考虑一下您实际想要更改位置/旋转角度的哪些分量(x,y,z)。 使用offset = new Vector3 (offset.x, offset.y, offset.z)并用常量替换所有不应更改的内容。

此外,当您将“相机”作为球的子对象时,可以将其设置为使得每一帧相机都不会随着球滚动而更新。您可以通过将代码放置在将组件x,y或z设置为等于某个常数的相机的update方法中来实现此目的。接地平面位于哪个轴上可能都是正确的选择。