Положение игрока меняется при повороте пистолета
![Neutral camera & gun rotation](https://i.stack.imgur.com/JivPp.jpg)
![camera & gun rotated upwards](https://i.stack.imgur.com/kIHhk.jpg)
![camera & gun rotated even more upwards](https://i.stack.imgur.com/OpwFh.jpg)
Позиция оружия:
![Weapon's Position](https://i.stack.imgur.com/396wd.png)
Позиция оружия после клонирования оружия:
![Weapon's Position after cloning the gun:](https://i.stack.imgur.com/A0Wl2.png)
Положение основной камеры
![Main Camera's position](https://i.stack.imgur.com/tWRzx.png)
Положение камер.Камеры пустые
![Cameras's position](https://i.stack.imgur.com/tUxdE.png)
Игрок:
![hierarchy](https://i.stack.imgur.com/xiNEX.png)
Если вы посмотритена изображениях вы можете видеть, что центр перемещается, а оружие вращается самостоятельно.Я знаю, я не очень понимаю, но я хотел бы понять, если это проблема и как ее решить.Я работал над этим почти 5 дней, я нахожусь в тупике, потому что я мог бы сделать это по-другому, но я хотел бы понять, что не так, спасибо.
код:
![Script](https://i.stack.imgur.com/fX9Mb.png)
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;
}
}
Когда я клонирую пистолет,Положение оружия меняется.Может быть, проблема в том, что когда я поворачиваю пистолет, пистолет занимает позицию персонажа как ось?Я думаю, что это проблема отношений между объектами.Есть ли у вас какие-либо идеи?Спасибо