预制件内的相机旋转
Camera rotation within a prefab
我正在尝试使用类似暗黑破坏神的相机系统在 unity3d 中创建多人游戏。所以无论我点击屏幕。该系统在单人游戏中运行良好,我不需要在播放器预制件中包含摄像头。但是现在我面临的问题是我的相机旋转也受到预制件旋转的影响 parent。层次结构如下所示:
添加到相机的脚本如下所示:
using UnityEngine;
using System.Collections;
public class MainCameraComponent : MonoBehaviour {
public GameObject Reaper;
private Vector3 offset;
void Start () {
offset = transform.position - Reaper.transform.position;
}
// Update is called once per frame
void LateUpdate () {
transform.position = Reaper.transform.position + offset;
}
}
当我 运行 玩游戏时,镜头总是在我的角色后面,而我希望它总是保持相同的旋转。所以如果我命令我的角色向北走我会看到他的背,如果它向南走我想看到前面。
注意阴影如何变化(因此旋转),但我总是面向模型的背面。 TLDR:我希望我的 child 相机忽略其 parent 的旋转变化并保持静止。同时让我的相机位置由其 parent 引导。据我所知,似乎不可能让网络管理员实例化一个新的播放器预制件,然后在同一层级上附加一个摄像头。
如有任何帮助,我们将不胜感激。
However Now I am facing the problem where my camera rotation is also
affected by the rotation of my prefab parent
那是因为你的 Camera
是播放器的 child 所以它会做 Player/parent 正在做的任何事情。
您的相机不应位于播放器下方。删除它并确保它不是玩家的 child 或任何其他 Object。该脚本应该可以工作,或者让相机跟随玩家,而不会使游戏的 Camera
成为 childObject。
从 LateUpdate
函数中删除 Player = GameObject.Find ("Player");
。您已经在 Start
函数中执行此操作,因此无需在 LateUpdate
函数中执行此操作。 GameObject.Find ("Player");
不应直接从 LateUpdate
函数中调用。它会减慢你的游戏速度。
编辑:
看了你的评论,看来你想用相机实例化一个播放器。您可以在不将相机设为播放器的 child 的情况下执行此操作。
您当前的设置:
玩家
- 型号
弹丸
- 射弹网格
相机
所以你的相机在播放器下面。
你的新设置:
PlayerPrefab
玩家
- 型号
- 投射物
- 射弹网格
相机(附上有问题的脚本)
Camera
现在是 PlayerPrefab 而不是 Player。现在,您可以实例化 PlayerPrefab 并使用脚本移动 Player。我不知道你的移动脚本是什么样的,但它应该附加到 Player 而不是 PlayerPrefab。 PlayerPrefab 用于保存所有内容,以便可以轻松地将其实例化为一个。您问题中的代码应附加到您的 Camera
.
我正在尝试使用类似暗黑破坏神的相机系统在 unity3d 中创建多人游戏。所以无论我点击屏幕。该系统在单人游戏中运行良好,我不需要在播放器预制件中包含摄像头。但是现在我面临的问题是我的相机旋转也受到预制件旋转的影响 parent。层次结构如下所示:
添加到相机的脚本如下所示:
using UnityEngine;
using System.Collections;
public class MainCameraComponent : MonoBehaviour {
public GameObject Reaper;
private Vector3 offset;
void Start () {
offset = transform.position - Reaper.transform.position;
}
// Update is called once per frame
void LateUpdate () {
transform.position = Reaper.transform.position + offset;
}
}
当我 运行 玩游戏时,镜头总是在我的角色后面,而我希望它总是保持相同的旋转。所以如果我命令我的角色向北走我会看到他的背,如果它向南走我想看到前面。
注意阴影如何变化(因此旋转),但我总是面向模型的背面。 TLDR:我希望我的 child 相机忽略其 parent 的旋转变化并保持静止。同时让我的相机位置由其 parent 引导。据我所知,似乎不可能让网络管理员实例化一个新的播放器预制件,然后在同一层级上附加一个摄像头。
如有任何帮助,我们将不胜感激。
However Now I am facing the problem where my camera rotation is also affected by the rotation of my prefab parent
那是因为你的 Camera
是播放器的 child 所以它会做 Player/parent 正在做的任何事情。
您的相机不应位于播放器下方。删除它并确保它不是玩家的 child 或任何其他 Object。该脚本应该可以工作,或者让相机跟随玩家,而不会使游戏的 Camera
成为 childObject。
从 LateUpdate
函数中删除 Player = GameObject.Find ("Player");
。您已经在 Start
函数中执行此操作,因此无需在 LateUpdate
函数中执行此操作。 GameObject.Find ("Player");
不应直接从 LateUpdate
函数中调用。它会减慢你的游戏速度。
编辑:
看了你的评论,看来你想用相机实例化一个播放器。您可以在不将相机设为播放器的 child 的情况下执行此操作。
您当前的设置:
玩家
- 型号
弹丸
- 射弹网格
相机
所以你的相机在播放器下面。
你的新设置:
PlayerPrefab
玩家
- 型号
- 投射物
- 射弹网格
相机(附上有问题的脚本)
Camera
现在是 PlayerPrefab 而不是 Player。现在,您可以实例化 PlayerPrefab 并使用脚本移动 Player。我不知道你的移动脚本是什么样的,但它应该附加到 Player 而不是 PlayerPrefab。 PlayerPrefab 用于保存所有内容,以便可以轻松地将其实例化为一个。您问题中的代码应附加到您的 Camera
.