2016-06-10 7 views
0

Ich versuche ein Multiplayer-Spiel in unity3d mit einem Diablo-ähnlichen Kamerasystem zu erstellen. Also wo auch immer ich auf den Bildschirm klicke. Das System funktionierte im Singleplayer, wo ich keine Kamera in ein Player-Prefab einbauen musste. Allerdings stehe ich jetzt vor dem Problem, dass meine Kamerarotation auch von der Rotation meines vorgefertigten Elternteils beeinflusst wird. Die Hierarchie sieht wie folgt aus:Kameradrehung in einem Fertighaus

enter image description here

Es gibt ein Skript zur Kamera hinzugefügt, die wie folgt aussieht:

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

Wenn ich das Spiel die Kamera bleibt immer hinter meinem Charakter laufen, während ich möchte, dass es immer in der gleichen Rotation bleibt. Wenn ich also meinem Charakter befehlen würde, nach Norden zu gehen, würde ich seinen Rücken sehen, wenn er nach Süden gehen würde, wollte ich die Vorderseite sehen.

enter image description here enter image description here

merken, wie die Schattenänderungen, (also die Drehung), aber ich immer die Rückseite meines Modells gegenüber. TLDR: Ich möchte, dass meine Kindkamera die Rotationsänderung ihres Elternteils ignoriert und statisch bleibt. während ich meine Kameraposition von ihrem Elternteil leiten lasse. Soweit ich weiß, scheint es unmöglich zu machen, dass ein Netzwerkmanager ein neues Player-Prefab instanziiert und anschließend eine Kamera auf der gleichen Hierarchieebene anbringt.

Jede Hilfe würde sehr geschätzt werden.

Antwort

1

Doch nun bin vor mir das Problem, wo meine Kamera-Rotation ist auch durch die Drehung meines Fertigmutter betroffen

Das ist, weil Ihr Camera ein Kind des Spielers ist es, so dass es bei jedem tun Spieler/Eltern tun es. Ihre Kamera sollte nicht unter dem Player sein. Entfernen Sie es und stellen Sie sicher, dass es kein Kind des Players oder eines anderen Objekts ist. Das Skript sollte funktionieren oder die Kamera dem Player folgen lassen, ohne das Camera Kind des GameObjects zu machen.

Entfernen Sie Player = GameObject.Find ("Player"); von der LateUpdate Funktion. Sie haben dies bereits in der Start Funktion getan, so dass es nicht notwendig ist, es in der LateUpdate Funktion zu tun. GameObject.Find ("Player"); sollte nie direkt von der LateUpdate Funktion aufgerufen werden. Es wird dein Spiel verlangsamen.

EDIT:

Nachdem Sie Ihren Kommentar zu lesen, es sieht aus wie Sie einen Spieler mit der Kamera instanziiert werden soll. Sie können dies tun, ohne die Kamera zu einem Kind Ihres Players zu machen.

Ihre aktuellen Setup-:

  • Spieler

    • Modell
    • Projektil

      • Projektil Mesh-
    • Kamera

So ist die Kamera unter Player.

Sie neue Setup-:

  • PlayerPrefab

    • Spieler

      • Modell
      • Projektil
        • Projektil Mesh-
    • Kamera

Camera ist jetzt PlayerPrefab statt Spieler (Skript in Frage zu diesem Attach). Jetzt können Sie PlayerPrefab instanziieren und den Player mit einem Skript verschieben. Ich weiß nicht, wie Ihr Movescript aussieht, aber es sollte an den Player nicht PlayerPrefab angehängt werden. Die PlayerPrefab wird verwendet, um alles zu halten, so dass es leicht als ein instanziiert werden kann. Der Code in Ihrer Frage sollte an Ihre Camera angeschlossen werden.

+0

Ich tat dies an erster Stelle und es funktionierte tatsächlich. Ich habe ein leeres gameObject mit dem Namen playerContainer erstellt und die Kamera zu dieser hinzugefügt, so dass sie sich auf derselben Hierarchieebene wie der Spieler befand. Das Problem, mit dem ich konfrontiert wurde, war, dass ich auf die Eigenschaft "isLocalPlayer" zugreifen musste, die von einer Netzwerkidentität im Player stammt. Da eine Netzwerkidentität nur einmal in einem Prefab erscheinen kann, musste ich sie dem Container anzeigen, damit der Networkmanager sie als Player-Prefab akzeptiert. Also, wie würde ich auf meine "IsLocalPlayer" -Eigenschaft von irgendwo in der Hierarchie zugreifen? –

+0

@MarkStroeven Meine Antwort geändert, die Ihr Netzwerkproblem lösen kann. Lesen Sie von EDIT herunter. Ich weiß nicht viel über Netzwerkidentität, aber Sie können es an die 'PlayerPrefab' anhängen, die das Eltern aller Prefabs ist. – Programmer

Verwandte Themen