Вы хотите расположить пулю с относительным смещением, основываясь на обращении пистолета, верно?Если вы установите положение, как сейчас, вы сделаете это в мировом положении, не связанном с направлением оружия.
Теперь есть два способа сделать это:
Поместитеbullet в качестве дочернего объекта пистолета с относительной локальной позицией и сразу же не заполняет его.Не очень хорошее решение и больше похоже на взлом.
Или используйте следующие методы, которые я создал:
/// <summary> Returns a vector which is relative to the facing and position of 'c'. </summary>
public static Vector3 RelativePosition (Transform c, Vector3 target)
{
return c.right * target.x + c.up * target.y + c.forward * target.z + c.position;
}
/// <summary> Returns a vector which is relative. </summary>
public static Vector3 RelativePosition (Vector3 position, Vector3 forward, Vector3 up, Vector3 right, Vector3 target)
{
return right * target.x + up * target.y + forward * target.z + position;
}
И дополняйте это:
/// <summary> Returns a vector which is relative to the facing of 'c'. </summary>
public static Vector3 RelativePositionZero (Transform c, Vector3 target)
{
return c.right * target.x + c.up * target.y + c.forward * target.z;
}
/// <summary> Returns a vector which is relative. </summary>
public static Vector3 RelativePositionZero (Vector3 forward, Vector3 up, Vector3 right, Vector3 target)
{
return right * target.x + up * target.y + forward * target.z;
}
Использование:Используйте метод RelativePosition, предоставьте Transform для пистолета в качестве параметра и относительное смещение для параметра Vector3.Пример:
item.position = RelativePosition (Camera.Main.transform, new Vector3 (1.5f, 0f, 4.0f));
Это поместило бы позицию 'item' на 4 единицы расстояния перед камерой и на 1,5 единицы расстояния вправо.
Подсказка: RelativePosition даст вам результатмировое положение как таковое.Это то, что вы используете, чтобы получить относительную позицию, которую вы ищете в качестве мировой позиции.RelativePositionZero даст вам относительное смещение от объекта Transform к заданной позиции Vector3.Это может быть использовано для определения, находится ли что-то левое или правое, выше или ниже, впереди или позади данного преобразования.