2016-06-10 93 views
0

我想在unity3d中使用类似暗黑破坏神般的相机系统创建多人游戏。所以无论我点击屏幕。该系统在单人模式下运行良好,我不需要在玩家预制件中包含相机。但是现在我面临的问题是,我的相机旋转也受到我预制父母旋转的影响。层次结构是这样的:预制内相机旋转

enter image description here

有加,看起来像这样的相机的脚本:

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; 
} 
} 

当我运行游戏的摄像机始终保持我的性格后面,而我希望它始终保持相同的旋转。所以如果我命令我的角色向北走,我会看到他的背部,如果它向南走,我想看到前方。

enter image description here enter image description here

通知阴影的变化,(因此旋转),但我怎么总是面对我的模型的背部。 TLDR:我希望我的孩子相机忽略其父母的旋转变化并且是静态的。同时让我的相机位置由其父母指导。据我所知,似乎不可能让网络管理员实例化一个新玩家预制,然后在相同的层级上连接一台摄像机。

任何帮助将不胜感激。

回答

1

不过现在我所面临的问题,在我的相机旋转也受我的预制父母的旋转

那是因为你的Camera是玩家的一个孩子,因此将尽一切的玩家/父母正在做。 您的相机不应位于播放器之下。删除它并确保它不是玩家或任何其他对象的孩子。该脚本应该可以工作,或者让相机跟随播放器,而不会使GameObject的子节点成为Camera

LateUpdate函数中删除Player = GameObject.Find ("Player");。您已经在Start函数中完成了此操作,因此不需要在LateUpdate函数中执行此操作。不应该直接从LateUpdate函数中调用GameObject.Find ("Player");。它会减慢你的游戏速度。

编辑:

阅读您的评论之后,它看起来像要实例与相机的球员。你可以做到这一点,而不使相机成为你的播放器的孩子。

您当前的设置

  • 球员

    • 型号
      • 弹网
    • 相机

所以你的相机是在播放器下方。

你新安装

  • PlayerPrefab

    • 球员

      • 型号
        • 弹网
    • 相机(有关安装脚本本)

Camera现在PlayerPrefab,而不是球员。现在,您可以实例化PlayerPrefab并使用脚本移动播放器。我不知道您的移动脚本是什么样子,但它应该附加到播放器而不是PlayerPrefabPlayerPrefab用于保存所有内容,以便它可以轻松实例化为一个。您的问题中的代码应附加到您的Camera

+0

我这是在第一个地方,它实际上工作。我制作了一个名为playerContainer的空白gameObject,并将相机添加到该相机中,以便它与玩家处于同一层级。我面临的问题是我需要访问播放器中网络标识给出的“isLocalPlayer”属性。因为网络身份可能只出现一次,我需要将它放到容器中,以便网络管理员接受它作为玩家预制。那么,我将如何从层次结构中较低的某处访问我的“isLocalPlayer”属性? –

+0

@MarkStroeven修改我的答案,可能会解决您的网络问题。从编辑下来阅读。对网络身份不太了解,但可以将其附加到作为所有预制项目的父项的“PlayerPrefab”。 – Programmer