2.5 d Прицеливание работает в правильном направлении, но не в левом направлении

#c# #unity3d #3d

Вопрос:

это мой первый пост на StackOverflow, так что извините, если я задаю вопрос не в том месте или что-то в этом роде. Я следил за учебником: https://www.youtube.com/watch?v=Q56quIB2sOg и сделал вторую часть под названием «Оружие Ik». Я делаю игру 2.5 d, мой персонаж правильно целится и правильно двигает верхнюю часть позвоночника, когда смотрит вправо, но когда смотрит влево, персонаж начинает сходить с ума. Работает в правильном направлении, не работает, когда обращен влево. Я поворачиваю свой плеер с помощью простого скрипта, который устанавливает поворот y на 180. Вот мой код для скрипта Ik оружия:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;

public class WeaponIK1 : MonoBehaviour
{
    [SerializeField] Vector3 targetVector;
    [SerializeField] Transform aimTransform;
    [SerializeField] Transform spine2;

    [SerializeField] int iterations = 10;
    public float angleLimit = 90;
    public float distanceLimit = 1.5f;
    void Update()
    {
        targetVector = ShootPortal.mousePosition;
        targetVector = new Vector3(0, targetVector.y, targetVector.z);
        //Debug.Log(targetTransform);
    }
    Vector3 GetTargetPosition()
    {
        Vector3 targetDirection = targetVector - aimTransform.position;
        Vector3 aimDirection = aimTransform.forward;
        float blendOut = 0;
        float targetAngle = Vector3.Angle(targetDirection, aimDirection);
        if (targetAngle > angleLimit)
        {
            blendOut  = (targetAngle - angleLimit) / 50;
        }

        Vector3 direction = Vector3.Slerp(targetDirection, aimDirection, blendOut);
        return aimTransform.position   direction;
    }
    void LateUpdate()
    {
        Vector3 targetPosition = GetTargetPosition();
        //Debug.Log("GetTargetPosition: "   GetTargetPosition());
        for (int i = 0; i < iterations; i  )
        {
            AimAtTarget(spine2, targetPosition);
        }
    }

    void AimAtTarget(Transform bone, Vector3 targetPosition)
    {
        Vector3 aimDirection = aimTransform.forward;
        Debug.Log(aimTransform.forward);
        Vector3 targetDirection = targetPosition - aimTransform.position;
        Quaternion aimTowards = Quaternion.FromToRotation(aimDirection, targetDirection);
        //Debug.Log("aimTowards: "   aimTowards);
        bone.rotation = bone.rotation * aimTowards;
    }
}
 

Ответ №1:

Хорошо, я исправил это, проблема заключалась в том, что, когда я поворачивал плеер влево, я устанавливал проигрыватель.вращение на кватернион.Эйлер. Если я вместо этого использую плеер.Поворот(0, 180, 0) все это работает.