//Methode die vom Spielercharackter aufgreufen wird wenn er eine Waffe aufnimmt public void DrawWeapon(Transform weapon) { if (!weapon || GameObject.ReferenceEquals(this.weapon, weapon)) { return; } // Aktuelle Waffe löschen DropWeapon(); // Waffe aufheben this.weapon = weapon; // Referenz auf neue Waffe // Waffenposition nicht mehr über das Netzwerk senden Network_SendTransform network = this.weapon.GetComponent <Network_SendTransform>(); network.Mode = PropMode.inactive; this.weapon.SetParent(transform); // Waffe an den Waffenanker hängen this.weapon.localPosition = new Vector3(); // Am Anker positionieren this.weapon.localRotation = Quaternion.identity; // Am Anker rotieren // Schießenskript mitteilen mit welcher Waffe geschossen wird fireing.MyWeapon = this.weapon.GetComponent <Weapon>(); // ---------------------- Netzwerkschnittstelle ---------------------- Netzwerk_Simulator.Senden(1, PlayerInfo.PlayerID, PackageType.pickedUp, network.ObjectID.ToString()); // ------------------------------------------------------------------- }
void FixedUpdate() { // Positionsdaten senden wenn das Objekt im Aktiv-Status ist if (status == PropStatus.active) { // ------------------ Simulierte Netzwerkschnittstelle ------------------ // Position senden Netzwerk_Simulator.Senden(game, objectID, PackageType.Position, (transform.position.x - posOffset.x) + "," + (transform.position.y - posOffset.y) + "," + (transform.position.z - posOffset.z)); // Ausrichtung senden Netzwerk_Simulator.Senden(game, objectID, PackageType.Rotation, transform.rotation.x + "," + transform.rotation.y + "," + transform.rotation.z + "," + transform.rotation.w); // ---------------------------------------------------------------------- } // Überprüfen ob sich das Objekt bewegt hat if (Mathf.Abs((transform.position - lastPosition).magnitude) > triggerActiveState || Mathf.Abs((transform.rotation.eulerAngles - lastRotation).magnitude) > triggerActiveState) { // Den Status auf Aktiv setzen, wenn das Objekt nicht vom Netzwerk bewegt wird if (status == PropStatus.inactive) { Status = PropStatus.active; } } // Den Status auf Inaktiv setzen, wenn das Objekt sich nicht mehr bewegt else { Status = PropStatus.inactive; } // Letzte synchronisierte Position merken. // Damit wird im nächsten Durchgang überprüft ob sich das Objekt bewegt hat. if (status != PropStatus.inactive) { lastPosition = transform.position; lastRotation = transform.rotation.eulerAngles; } }
void Update() { // Input registrieren inp_horizontal = Input.GetAxisRaw("Horizontal"); inp_vertical = Input.GetAxisRaw("Vertical"); // Springen Event if (Input.GetButtonDown("Jump") && On_Inp_Jump != null) { On_Inp_Jump(); } // Ducken Event if (On_Inp_Crouch != null) { // Ducken gedrückt halten oder toggeln if (crouchToggle) { // Ducken toggeln if (Input.GetButtonDown("Crouch")) { if (isCrouchingInp) { On_Inp_Crouch(false); isCrouchingInp = false; } else { On_Inp_Crouch(true); isCrouchingInp = true; } } } else { // Ducken gedrückt halten if (Input.GetButtonDown("Crouch")) { isCrouchingInp = true; On_Inp_Crouch(true); } else if (Input.GetButtonUp("Crouch")) { isCrouchingInp = false; On_Inp_Crouch(false); } } } // ------------------ Simulierte Netzwerkschnittstelle ------------------ // Position senden Netzwerk_Simulator.Senden(playerID, -1, PackageType.Position, transform.position.x + "," + transform.position.y + "," + transform.position.z); // Geschwindigkeit (für den Animator) senden Vector3 hilf = transform.worldToLocalMatrix * phy.velocity; Netzwerk_Simulator.Senden(playerID, -1, PackageType.Velocity, hilf.x + "," + hilf.y + "," + hilf.z); // Ausrichtung senden Netzwerk_Simulator.Senden(playerID, -1, PackageType.Rotation, transform.rotation.x + "," + transform.rotation.y + "," + transform.rotation.z + "," + transform.rotation.w); // Granatenwurf senden if (Input.GetButtonDown("Fire1")) { Netzwerk_Simulator.Senden(playerID, -1, PackageType.Granade, ""); } // ---------------------------------------------------------------------- }