儿童游戏对象比父对象游戏移动得更快

时间:2017-04-17 13:35:29

标签: unity3d

Character是父对象,并且将camera对象作为其子对象(FPS类型)。

Camera对象有一个脚本,可以“抛出”raycast来检测它前面的对象。

Camera对象有一个子对象'Crosshair',它附有一个脚本'ShowCrosshair'。

Character <- Camera <- Crosshair.

预期的行为应该是:我上下移动鼠标,相机围绕y轴旋转,同时十字准线对象在屏幕中心平滑移动。

但是,每当我向上/向下移动鼠标时,十字准线的移动速度都会超过相机可以旋转的距离。

这是我的Camera Rotate代码:

 //vertical is float and is initially zero and transform is for the current gameObject i.e Camera
 vertical -= Input.GetAxis("Mouse Y");
 transform.localRotation = Quaternion.Euler(new Vector3(vertical, 0.0f, 0.0f));
  

此脚本附加到Camera对象。

     

希望Crosshair使用相机移动,这就是为什么它是相机对象的父级。

2 个答案:

答案 0 :(得分:0)

我认为您的不受欢迎的行为会发生,因为每当您移动,旋转或缩放父变换时,所有子项都会受到影响,因此当您旋转相机时,十字准线随之移动然后您旋转十字准线使其旋转一秒钟时间和消失。

答案 1 :(得分:0)

看起来你在这条线上围绕X轴而不是Y(垂直)旋转:

transform.localRotation = Quaternion.Euler(new Vector3(vertical, 0.0f, 0.0f));

此外,您应该将输入的影响乘以增量时间,否则它将移动得太快。

vertical -= Input.GetAxis("Mouse Y") * Time.deltaTime;

但我不认为这是你的问题。您注释该脚本已附加到Camera。是否还附加到Crosshair?因为如果是这样,那么你将获得双倍轮换。如果没有,请查看哪些脚本可能正在更改Crosshair的轮换。如果您只是移动相机,则根本不需要旋转Crosshair的任何内容(因为它将与其父项一起移动)。