Unity,跟随一个滚动的球并能够围绕它旋转
Unity, Follow a rolling ball and be able to rotate around it
我希望能够跟随滚动的球(我可以自己完成)并且我希望能够在按住右键的同时围绕球旋转(我也可以自己完成)但是当我尝试将这 2 个结合起来,我得到了不需要的结果。
在下面的代码中,您可以看到,如果我只是想围绕球旋转,我的 "RotateAround" 可以解决这个问题,如果我只是想随着相机的移动而跟随球相同的距离和角度,然后我的 _offset 会处理这个问题。当我尝试将 2 结合起来使其跟随球并能够同时旋转相机(通过右键单击)时,相机只是停止跟随球。
我认为,因为您可以单独使用 _offset 跟随球,我在 Unity 教程中发现,当使用 RotateAround 更改位置时,_offset 会负责将相机保持在新位置。顺便说一句,这个脚本在我的相机游戏对象上。
void Start()
{
_offset = CamFollowStartSpot.position - Ball.transform.position;
}
void LateUpdate()
{
if (Input.GetMouseButton(1))
{
_transform.RotateAround(Ball.transform.position, Vector3.up, 20 * Time.deltaTime);
_offset = _transform.position - Ball.transform.position;
}
_transform.position = Ball.transform.position + _offset;
}
我发现哪里不对了,就是我在最后设置位置的时候。下面的代码需要在 IF 语句之前调用以检查我的鼠标点击输入。
_transform.position = Ball.transform.position + _offset;
正确的方法在下面的代码中。
void LateUpdate()
{
_transform.position = Ball.transform.position + _offset;
if (Input.GetMouseButton(1))
{
_transform.RotateAround(Ball.transform.position, Vector3.up, 20 * Time.deltaTime);
_offset = _transform.position - Ball.transform.position;
}
}
我希望能够跟随滚动的球(我可以自己完成)并且我希望能够在按住右键的同时围绕球旋转(我也可以自己完成)但是当我尝试将这 2 个结合起来,我得到了不需要的结果。
在下面的代码中,您可以看到,如果我只是想围绕球旋转,我的 "RotateAround" 可以解决这个问题,如果我只是想随着相机的移动而跟随球相同的距离和角度,然后我的 _offset 会处理这个问题。当我尝试将 2 结合起来使其跟随球并能够同时旋转相机(通过右键单击)时,相机只是停止跟随球。
我认为,因为您可以单独使用 _offset 跟随球,我在 Unity 教程中发现,当使用 RotateAround 更改位置时,_offset 会负责将相机保持在新位置。顺便说一句,这个脚本在我的相机游戏对象上。
void Start()
{
_offset = CamFollowStartSpot.position - Ball.transform.position;
}
void LateUpdate()
{
if (Input.GetMouseButton(1))
{
_transform.RotateAround(Ball.transform.position, Vector3.up, 20 * Time.deltaTime);
_offset = _transform.position - Ball.transform.position;
}
_transform.position = Ball.transform.position + _offset;
}
我发现哪里不对了,就是我在最后设置位置的时候。下面的代码需要在 IF 语句之前调用以检查我的鼠标点击输入。
_transform.position = Ball.transform.position + _offset;
正确的方法在下面的代码中。
void LateUpdate()
{
_transform.position = Ball.transform.position + _offset;
if (Input.GetMouseButton(1))
{
_transform.RotateAround(Ball.transform.position, Vector3.up, 20 * Time.deltaTime);
_offset = _transform.position - Ball.transform.position;
}
}