Пистолет не следует за камерой - PullRequest
0 голосов
/ 11 июля 2019

Положение игрока меняется при повороте пистолета

Neutral camera & gun rotation

camera & gun rotated upwards

camera & gun rotated even more upwards

Позиция оружия:

Weapon's Position

Позиция оружия после клонирования оружия:

Weapon's Position  after cloning the gun:

Положение основной камеры

Main Camera's position

Положение камер.Камеры пустые

Cameras's position

Игрок:

hierarchy

Если вы посмотритена изображениях вы можете видеть, что центр перемещается, а оружие вращается самостоятельно.Я знаю, я не очень понимаю, но я хотел бы понять, если это проблема и как ее решить.Я работал над этим почти 5 дней, я нахожусь в тупике, потому что я мог бы сделать это по-другому, но я хотел бы понять, что не так, спасибо.

код:

Script

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class RuotaAttornoAlPersonaggio : MonoBehaviour
{
    public static bool cursorLocked=true;
    public Transform player;
    public Transform cams;
    public Transform weapon;

    public float xSens;
    public float ySens;
    public float maxAngle;

    private Quaternion camCenter;

    void Start()
    {
        camCenter = cams.localRotation;
    }

    // Update is called once per frame
    void Update()
    {
        SetY();
        SetX();
        UpdateCursorLock();
    }


    void SetY()
    {
        float y_input = Input.GetAxis("Mouse Y") * ySens * Time.deltaTime;
        Quaternion ty = Quaternion.AngleAxis(y_input, -Vector3.right);
        // Debug.Log(t);
        Quaternion ty_delta = cams.localRotation * ty;

        if (Quaternion.Angle(camCenter, ty_delta) < maxAngle)
        {
            cams.localRotation = ty_delta;
            weapon.localRotation = ty_delta;
        }

        // weapon.rotation = cams.rotatioùn;
    }

    void SetX()
    {
        float x_input = Input.GetAxis("Mouse X") * ySens * Time.deltaTime;
        Quaternion tx = Quaternion.AngleAxis(x_input, Vector3.up);
        // Debug.Log(t);
        Quaternion tx_delta = player.localRotation * tx;
        player.localRotation = tx_delta;
    }

    void UpdateCursorLock()
    {
        if (cursorLocked)
        {
            Cursor.lockState = CursorLockMode.Locked;
            Cursor.visible = false;

            if (Input.GetKeyDown(KeyCode.Escape))
            {
                cursorLocked = false;
            }
        }
        else
        {
            Cursor.lockState = CursorLockMode.None;
            Cursor.visible = true;

            if (Input.GetKeyDown(KeyCode.Escape))
            {
                cursorLocked = true;
            }
        }
    }
}

Код пистолета клонирования: я не думаю, что это ошибка этого кода

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Movimento : MonoBehaviour {
    public GameObject[] loadout;
    public Transform weaponParent;
    private GameObject curretWeapon;
    // Use this for initialization
    void Start () 
    {

    }

    // Update is called once per frame
    void Update () 
    {
        if (Input.GetKeyDown(KeyCode.Alpha1)) Equip(0);

    }
    void Equip(int n)
    {
        if (curretWeapon != null) Destroy(curretWeapon);
        GameObject new_weap = (GameObject)Instantiate(loadout[n], weaponParent.position, weaponParent.rotation, weaponParent);
        new_weap.transform.localPosition = Vector3.zero;
        new_weap.transform.localEulerAngles = Vector3.zero;
        curretWeapon = new_weap;
    }
}

Когда я клонирую пистолет,Положение оружия меняется.Может быть, проблема в том, что когда я поворачиваю пистолет, пистолет занимает позицию персонажа как ось?Я думаю, что это проблема отношений между объектами.Есть ли у вас какие-либо идеи?Спасибо

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