Как изменить вращение GameObject на вращение камеры моего игрока? - PullRequest
0 голосов
/ 15 апреля 2020

Я работаю над шутером от первого лица. У меня есть целевая функция, которая помещает пистолет прямо перед камерой, чтобы он выглядел так, будто вы держите его перед собой. Я пытаюсь сделать так, чтобы пистолет также вращался вместе с камерой на оси Z, чтобы пистолет не оставался неподвижным, потому что это выглядит странно и мешает. Чтобы сделать это, я попытался это сделать: GPR.gun.transform.rotation = Quaternion.Euler(0, 0, plrCam.transform.rotation.z);, однако это приводит к тому, что пистолет вращается очень немного вокруг оси z и, в основном, поворачивается вокруг оси y всякий раз, когда я перемещаю камеру. Я начинающий программист в Unity, поэтому, пожалуйста, постарайтесь сделать ответы более понятными для начинающих, чтобы я мог понять это. Вот мой полный сценарий:

using System.Collections.Generic;
using UnityEngine;

public class PistolFire : MonoBehaviour
{
    //Gun Properties

    public float range = 50f;
    public float damage = 10f;
    //Sensitivity decrease for looking down the sights
    public float downSights = 5f;

    //Other vars
    private playerGunControls playerGun;
    private GameObject plrCam;
    private Camera fpsCam;
    private ParticleSystem muzzleFlash;
    private GameObject impactEffect;
    private bool aimed = false;
    private GameObject aimPos;
    private GunPickupRaycast GPR;
    private GameObject handPos;
    private GameObject Player;

    // Start is called before the first frame update
    void Start()
    {
        //Getting objects because gun is instantiated, so this is necessary
        plrCam = GameObject.Find("Player Camera");
        playerGun = plrCam.GetComponent<playerGunControls>();
        fpsCam = plrCam.GetComponent<Camera>();
        muzzleFlash = GetComponentInChildren<ParticleSystem>();
        impactEffect = GameObject.Find("Impact Effect");
        aimPos = GameObject.Find("aimPos");
        GPR = plrCam.GetComponent<GunPickupRaycast>();
        handPos = GameObject.Find("Hand Pos");
        Player = GameObject.Find("Player");
    }

    // Update is called once per frame
    void Update()
    {
        //Check for shoot button down
        if (Input.GetButtonDown("Fire1"))
        {
            if (playerGun.holding == "Pistol")
            {
                Shoot();
            }
        }
        //Check if aim button down
        if (Input.GetButton("Fire2"))
            {
            if (playerGun.holding == "Pistol")
            {
                Aim();
            }
        }
        //Check if no longer aiming to reset to normal
        if (aimed == true && !(Input.GetButton("Fire2")))
        {
            Unaim();
        }

    }
    void Shoot()
    {

        muzzleFlash.Play();

        RaycastHit hit;
        if(Physics.Raycast(plrCam.transform.position, plrCam.transform.forward, out hit, range))
        {
            Debug.Log(hit.transform.name);

            Health health = hit.transform.GetComponent<Health>();
            if (health != null)
            {
                health.TakeDamage(damage);
            }

            //Instantiate the Impact Effect
            GameObject IE = Instantiate(impactEffect, hit.point, Quaternion.identity);
            Destroy(IE, 1.5f);

        }
    }
    void Aim()
    {
        aimed = true;
        Debug.Log("Aiming");
        GPR.gun.transform.position = aimPos.transform.position;
        GPR.gun.transform.rotation = Quaternion.Euler(0, 0, plrCam.transform.rotation.z);
    }
    void Unaim()
    {
        GPR.gun.transform.position = handPos.transform.position;
        Debug.Log("No longer aiming");
        aimed = false;
    }
}

1 Ответ

0 голосов
/ 16 апреля 2020

Я исправил свою проблему, сделав пистолет ребенком моей камеры, а не ребенком моего игрока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...