Расположение пистолета в постоянном месте - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь расположить свой пистолет так, как это делают большинство игр в секунду, например, вот так:

enter image description here

Но у меня возникает проблема, когда я пытаюсь расположить и повернуть его вместе с плеером. Пистолет плохо вращается и не всегда имеет одинаковую позицию.

Есть ли способ удержать оружие в том же положении и заставить его хорошо вращаться вместе с игроком?

Но моя главная проблема - это положение ружья, мне нужно, чтобы оно оставалось на одном месте, как на каждом кадре в секунду, когда я запускаю игру и подбираю ружье, оно появляется в другом месте на экране из-за поворота.

Вот код, который я пытаюсь использовать:

GameObject temp = GameObject.Find(gameObject.name);
playerGuns[keyPress] = Instantiate(temp, Player.transform.position 
                       + new Vector3(-2f, 3f, 4f), Quaternion.identity) as GameObject;
playerGuns[keyPress].name = gameObject.name;
playerGuns[keyPress].tag = gameObject.tag;
playerGuns[keyPress].transform.parent = Player.transform;
playerGuns[keyPress].transform.rotation.SetLookRotation(Player.transform.position);

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Хорошо, вот ответ, который я обещал:

Первая проблема была связана с тем, как вы устанавливали вращение, SetLookRotation принимает 2 параметра, Vector3 view и Vector3 up, вторая по умолчанию имеет значение Vector3.up. Вы проходили в player.transform.position для «представления», в котором вы хотите видеть трансформацию. Подумайте об этом так, если я далеко на востоке, лицом к западу, мое оружие будет обращено на восток ... ( Это при условии, что SetLookRotation нормализует его.) Это потому, что моя фактическая позиция - восток, от какого-то произвольного происхождения. То, что вы могли бы использовать, было бы player.transform.forward.

Чтобы создать объект и иметь тот же относительный угол поворота и положение, которое вы можете использовать Instantiate, как в исходном коде. Существует несколько версий instantiate .

В комментариях я сказал дать себе offsetPosition и eulerAngle, но это может быть довольно хлопотно, если у вас есть несколько видов оружия. Я упомянул, что дам рекомендацию, как настроить это для нескольких видов оружия ... Так что вот так.


Объекты для скриптования

В Unity вы можете создавать эти объекты для хранения информации о конкретном объекте, например, объект «Оружие» может выглядеть так:

using UnityEngine;
using System.Collections;

[CreateAssetMenu(fileName = "New Weapon", menuName = "Weapon")]    
public class WeaponObject : ScriptableObject {
    public string objectName = "New Weapon";
    public Vector3 offSetPosition;
    public Vector3 startOffsetRotation;
    public float fireRate;
    // Using a gameObject to store the weapon model so you can technical
    // store the firing point.
    public GameObject weaponModel;  
}

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

С этим вы можете создавать несколько видов оружия и хранить их данные как WeaponManager, который порождает каждое оружие. с чем-то вроде:

WeaponObject weapon = WeaponManager.getWeapon(keyPress);
playerGuns[keyPress] = Instantiate(weapon.weaponModel, Player.transform.position + weapon.offsetPosition, Quaternion.identity) as GameObject;
playerGuns[keyPress].name = weapon.objectName;
playerGuns[keyPress].transform.parent = Player.transform;
playerGuns[keyPress].transform.eulerAngles = weapon.startOffsetRotation;
if(player.weaponScript != null) {
   // we can have a single script for all of our weapons, and the WeaponObject
   // will control its firerate, which projectiles it fires, etc.
   player.weaponScript.setWeapon(weapon);
}
0 голосов
/ 02 мая 2018
playerGuns[keyPress].transform.parent = Player.transform;

Эта строка может вызывать проблемы. Если вы воспитываете свое оружие для трансформации игроков, оно будет следовать за игроком. Но, похоже, вы хотите, чтобы он следовал за камерой?

попробовать:

 playerGuns[keyPress].transform.parent = Camera.main.transform;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...