Wie kann ich dazu bringen, dass Waffen in einer festen Position auf den Spielern Bildschirm Unity3D bleiben?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wie kann ich dazu bringen, dass Waffen in einer festen Position auf den Spielern Bildschirm Unity3D bleiben?

Post by Anonymous »

Ich habe versucht, ein Problem in meinem 3D-Projekt der ersten Person zu beheben, bei dem meine Waffen nicht ordnungsgemäß um ihre Drehpunkte drehten, und nachdem sie sie behoben hatten, bleiben sie nicht mehr in ihren Standardpositionen auf dem Bildschirm wie bei allen Schützen, bei denen die Waffe ständig im unteren Mittelpunkt des rechten Rechtens des Spielers des Spielers bleibt. class = "Lang-none hübschprint-override">

Code: Select all

→ WeaponHolder (child of Main Camera, stores all my guns and has a script to manage them)
→ Gun #1, Gun #2, etc (all child objects of the WeaponHolder)
Der Waffenhalter und alle Kinderpistolen drehen sich jetzt perfekt um ihre Drehpunkte, aber die Waffen bewegen sich vom Bildschirm, wenn ich meinen Spieler drehe oder nach oben/nach unten schaue. Ich kann nicht beide reparieren, es ist entweder der eine oder der andere. < /P>

Code: Select all

using UnityEngine;

public class CameraFunctionality : MonoBehaviour
{
public float defaultMouseSensX = 2f;
public float defaultMouseSensY = 2f;

public Transform headBone;
public Vector3 cameraOffset = new Vector3(0f, 0.1f, 0f);

private Transform cam;
private Quaternion targetRotation;

public float rotationX = 0f;
public float rotationY = 0f;
public WeaponManager weaponManager;
[HideInInspector] public bool isClimbing = false;

public Recoil recoil;

public float mouseX;
public float mouseY;

public Aiming aim;
public float cameraRecoilY = 0f;

[SerializeField] public Transform weaponHolder;
[SerializeField] private Vector3 weaponHolderOffset = Vector3.zero;

void Start()
{
cam = Camera.main.transform;
Cursor.lockState = CursorLockMode.Locked;
}

void Update()
{
Weapon currentWeapon = weaponManager.GetCurrentWeapon();

float baseSensX = currentWeapon ? currentWeapon.baseMouseSensX : defaultMouseSensX;
float baseSensY = currentWeapon ? currentWeapon.baseMouseSensY : defaultMouseSensY;
float aimMultiplier = currentWeapon ? currentWeapon.aimSensitivityMultiplier : 1f;

float currentSensX = aim.isAiming ? baseSensX * aimMultiplier : baseSensX;
float currentSensY = aim.isAiming ? baseSensY * aimMultiplier : baseSensY;

mouseX = Input.GetAxisRaw("Mouse X") * currentSensX;
mouseY = Input.GetAxisRaw("Mouse Y") * currentSensY;

rotationY += mouseX;
rotationX -= mouseY;
rotationX = Mathf.Clamp(rotationX, -85f, 85f);

cam.position = headBone.position + cameraOffset;

if (!isClimbing)
{
targetRotation = Quaternion.AngleAxis(rotationY, Vector3.up);
transform.rotation = targetRotation;
}

cam.rotation = Quaternion.Euler(rotationX, rotationY + cameraRecoilY, 0f);

if (weaponHolder != null)
{
weaponHolder.position = cam.position + weaponHolderOffset;
weaponHolder.rotation = cam.rotation;
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post