проблемы с вращением - PullRequest
       15

проблемы с вращением

0 голосов
/ 01 января 2019

Итак, в Unity 3D я столкнулся с использованием контроллера персонажа, чтобы вращать игровой объект игрока с помощью системы 3D-гравитации, которую я использую.вот сценарии:

using System.Collections;
using UnityEngine;

[RequireComponent (typeof (Rigidbody))]
public class GravityBody : MonoBehaviour {

    public GravityAttractor attractor;
    private Transform myTransform;

    void Start () {
        GetComponent<Rigidbody> ().useGravity = false;
        GetComponent<Rigidbody> ().constraints =
            RigidbodyConstraints.FreezeRotation;
        myTransform = transform;
    }

    void FixedUpdate () {
        if (attractor) {
            attractor.Attract (myTransform);
        }
    }

    void OnTriggerEnter (Collider col) {
        GravityAttractor obj = col.GetComponent ("GravityAttractor") as
        GravityAttractor;
        if (obj) {
            attractor = obj;
        }
    }

    void OnTriggerExit (Collider col) {
        attractor = null;
    }

}

и:

using System.Collections;
using UnityEngine;

public class GravityAttractor : MonoBehaviour {

    public float gravity = 0;
    public float rotationSmoothness = 5f;
    public float density = 5.52f;
    private float volume;

    public void Start () {
        if (gravity == 0) {
            if (GetComponent<Collider> ().GetType () == typeof (SphereCollider)) {
                volume = (GetComponent<Collider> ().bounds.size.x * Mathf.PI) / 6;
            } else if (GetComponent<Collider> ().GetType () == typeof (CapsuleCollider)) {
                volume = ((Mathf.PI * GetComponent<Collider> ().bounds.size.x * GetComponent<Collider> ().bounds.size.y) * GetComponent<Collider> ().bounds.size.z) / 4;
            } else {
                volume = GetComponent<Collider> ().bounds.size.x * GetComponent<Collider> ().bounds.size.y * GetComponent<Collider> ().bounds.size.z;
            }
            gravity = -((density / 10) * volume) / 2;
        }
    }

    public void Attract (Transform body) {
        Vector3 gravityUp = (body.position - transform.position).normalized;
        Vector3 localUp = body.up;

        body.GetComponent<Rigidbody> ().AddForce (gravityUp * gravity);

        Quaternion targetRotation = Quaternion.FromToRotation (localUp, gravityUp) * body.rotation;
        body.rotation = Quaternion.Slerp (body.rotation, targetRotation, rotationSmoothness * Time.deltaTime);
    }

}

проблема в том, что всякий раз, когда я пытаюсь добавить в стандартное единство, возникают проблемы с контроллером третьего лица, когда персонаж пытается вращаться как показано в этом видео

Если кто-нибудь знает, что делать, я был бы признателен за любую помощь.(я использую самую последнюю версию Unity)

...