嗨,我正试图让我的相机跟随我的播放器(Sphere)移动。我有相机跟随玩家,但是当球体旋转时,相机也随之旋转。那不是我要找的东西。我需要相机保持在球体上并在转动时旋转。到目前为止,这是我的代码:
编辑:我正在寻找的东西就像您在vid中看到的一样。球体旋转时相机旋转的位置,所以它一直在它后面。 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;
}
}
}
答案 0 :(得分:2)
您应该实现以下逻辑:
创建一个空的gameObject:Character,将其作为子元素:Camera,Sphere
当您移动时,只需变换角色,因此“照相机”和“球体”以完全相同的方式变换。
现在,当您只想旋转球体而不旋转相机时,只需在球体中应用旋转(或其他任何旋转)即可。 为此,您可以在脚本中传递角色和球体。 因此,移动变换将仅应用于球体中的角色和任何自定义移动。
尼克
答案 1 :(得分:1)
您是否亲自编写了此代码?
如果lookat
为真,它将看起来像您想要的那样。如果为假,则按照您的描述进行操作。
只需在编辑器中查看并选中“ look at”框即可。
如果您不想使用它,可以通过删除lookat
变量并替换
// compute rotation
if (lookAt)
{
transform.LookAt(target);
}
else
{
transform.rotation = target.rotation;
}
作者
// compute rotation
transform.LookAt(target);
编辑更多说明:
在代码中,您有两个选择:lookat
和offsetPositionSpace
。
offsetPositionSpace
基本上可以是两个值:
Self
->相机将始终位于播放器后面(如果旋转播放器,它将移动到后面)World
->相机将始终模仿玩家的移动(如果玩家旋转,相机将不会移动 LookAt
也可以有两个值