#unity3d #rotation
#unity3d #вращение
Вопрос:
Привет, итак, я создаю сценарий отдачи для своего шутера от первого лица. У меня пистолет работает довольно хорошо. Вот мой скрипт:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GunRecoil : MonoBehaviour
{
public Vector3 beforeRecoilRotation, rightBeforeRecoilRotation, leftBeforeRecoilRotation;
//I have a separate script controlling maxRecoilX and recoil
public float maxRecoilX = -0, recoilSpeed = 10, recoil = 0;
[SerializeField]
GameObject leftControl, rightControl, weapon;
public bool once = false;
// Start is called before the first frame update
void Recoiling()
{
//if recoil is present
if (recoil > 0)
{
//make amount of recoil
var maxRecoil = Quaternion.Euler(maxRecoilX, 0, 0);
//move gun's rotation, according to recoil
weapon.transform.localRotation = Quaternion.Slerp(weapon.transform.localRotation, maxRecoil, Time.deltaTime * recoilSpeed);
//subtract recoil by time.
recoil -= Time.deltaTime;
}
else
{
//make sure recoil is now zero
recoil = 0;
//make min recoil, based on starting position
Quaternion minRecoil = Quaternion.Euler(beforeRecoilRotation);
Quaternion minRecoilHandRight = Quaternion.Euler(0, 0, 0);
weapon.transform.localRotation = Quaternion.Slerp(weapon.transform.localRotation, minRecoil, Time.deltaTime * recoilSpeed / 2);
// rightControl.transform.localRotation = Quaternion.Slerp(rightControl.transform.localRotation, minRecoilHandRight, Time.deltaTime * recoilSpeed / 2);
maxRecoilX = 0;
}
}
// Update is called once per frame
void Update()
{
//constantly run Recoiling
Recoiling();
}
}
У меня также есть руки для моего пистолета. Я хочу, чтобы они следовали за вращением пистолета, за вращением моего пистолета.
Сначала я попробовал просто применить отдачу к руке. Результаты были близки, но недостаточно близки. Я использовал что-то вроде
var maxRecoilRight = Quaternion.Euler(maxRecoilX *5f, 0, 0);
rightControl.transform.localRotation = Quaternion.Slerp(weapon.transform.localRotation, maxRecoilRight, Time.deltaTime * recoilSpeed);
Вот результаты:
отдача один
Я также пробовал использовать Fast IK: https://assetstore.unity.com/packages/tools/animation/fast-ik-139972#reviews . Это не сработало, поскольку я использую части руки в анимации, я также не могу привязать руки к пистолету, поскольку мне придется заменять анимации, и это может сломать мою общую установку.
Какую математику я мог бы использовать, чтобы переместить мои руки к моему пистолету в Unity? Пожалуйста, оставьте для меня какие-либо предложения. Спасибо вам и хорошего дня / вечера.
Ответ №1:
Вы могли бы отключить анимацию рук, пока продолжается отдача, и использовать IK-решение на это время. Затем, когда отдача закончится, вы можете снова включить ее.
Комментарии:
1. Хорошо. Знаете ли вы что-нибудь, что может работать с универсальной установкой?
2. Вы могли бы попробовать смешать деревья, чтобы анимировать свои руки в зависимости от некоторого параметра отдачи пистолета.