Хорошо, вот ответ, который я обещал:
Первая проблема была связана с тем, как вы устанавливали вращение, 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);
}