我正在使用unity 2018.3.5f1,因此该问题的一些解决方案不起作用。
从Roll-A-Ball演示项目开始,我想扩展摄影机脚本以跟随播放器,同时还要跟踪运动方向。例:如果球开始向侧面移动,我需要摄像机绕着玩家的轴旋转以定位在他的身后,然后开始跟随他。
我尝试使相机成为我要控制的球的孩子,并且尝试制作脚本,但是它无法正确跟随球,因此会不断旋转相机和球(i' m使用这段代码并尝试对其进行修改,因为它是唯一可行的代码)
这是我目前的代码:
Activity
我了解为什么它会旋转,但是没有进行任何研究都无法帮助我找到如何锁定相机的方法,以便相机始终在球的后方
答案 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方法中来实现此目的。接地平面位于哪个轴上可能都是正确的选择。