Also verwende ich das FPS-Controller-Prefab aus dem Standard-Asset und ich habe mein Skript "Camera Push Up Effect" an die Hauptkamera (FirstPersonCharacter) angehängt. Alles funktioniert so, wie es sollte, aber das Problem, das ich gerade habe, ist, wenn der Spieler schießt, er drückt die Kamera nicht nach oben. Was ich hier erreichen will, ist, der Waffe des Spielers etwas Rückstoß zu geben, damit sie nicht an einer Stelle bleibt, wenn der Spieler schießt. Ich möchte auch die Spielerrotation auf der x-Achse begrenzen, damit die Waffe nicht für immer weitergeht (die Min wäre -90 Grad und die Max wäre 0).Wie kann ich die Kamera nach oben drücken, wenn der Spieler seine Waffe abfeuert und die Position der Waffe zurückstellt, wenn sie aufgehört hat zu schießen?
using UnityEngine;
using InControl;
public class CameraPushUpEffect : MonoBehaviour
{
public float rotateSpeed;
public float maxRotationX;
public float minRotationX;
private Vector3 V3Rotate = Vector3.zero;
// Update is called once per frame
void Update()
{
InputDevice device = InputManager.ActiveDevice;
if(device.RightBumper) // The player is shooting.
{
pushCameraUp();
}
else if (transform.localRotation.x != 0) // Slerp back to the original unrotated position.
{
transform.localRotation = Quaternion.Slerp(transform.localRotation, Quaternion.identity,
Time.deltaTime * rotateSpeed);
}
}
private void pushCameraUp()
{
V3Rotate.x += rotateSpeed * Time.deltaTime;
float newRotationX = Mathf.Clamp(V3Rotate.x, minRotationX, maxRotationX);
Quaternion maxRotation = Quaternion.Euler(newRotationX, 0, 0);
transform.localRotation = Quaternion.Slerp(transform.localRotation, maxRotation, Time.deltaTime * rotateSpeed);
}
}
Was ich verstehen, wenn Ihr Spieler schießen beginnt, Ihre pushCameraUp(); Funktion beginnt zu arbeiten. ABER Sie tun dies in update, so dass transform.localRotation.x wegen der Funktion geändert wird. Und sofort beginnt Ihr "else if" -Zustand zu arbeiten. Versuchen Sie dies zu bestätigen, indem Sie die else if-Anweisung befehlen. Wenn ich richtig bin, müssen Sie möglicherweise Koroutinen verwenden. Oder ein Bool könnte funktionieren – Thalthanas
@EmreE Ich habe den else auskommentiert wenn und es immer noch nicht die X-Drehung der Waffe ändert (aus dem Inspektor bleibt der Wert 0 vollständig. Es geht nicht auf irgendeinen Wert und dann zurück zu 0). Idealerweise sollte das else if nur dann auftreten, wenn der Spieler den Feuerknopf losgelassen hat. –
@EmreE Okay, ich habe meine Kamera in diesem Moment bewegt, aber nur indem ich ein Transformationsobjekt der Hauptkamera zu diesem Skript hinzufüge und dieses Skript an mein Waffenobjekt anfüge (natürlich hat die Hauptkamera dieses Skript nicht mehr). Meine Frage ist, warum muss ich den zusätzlichen Schritt des Hinzufügens eines Transformationsobjekts der Hauptkamera gehen? Warum muss es so gemacht werden 'playerCamera.transform.localRotation = ...' anstelle von 'transform.localRotation = ...'? –