Проблема с Bezier Path Creator и камерой от третьего лица - PullRequest
0 голосов
/ 26 марта 2019

У меня действительно странная проблема.Я скачал "Bezier Path Creator" https://assetstore.unity.com/packages/tools/utilities/b-zier-path-creator-136082 (код ниже):

using UnityEngine;
using System.Collections.Generic;

namespace PathCreation
{
    public class PathCreator : MonoBehaviour
{

    /// This class stores data for the path editor, and provides accessors to get the current vertex and bezier path.
    /// Attach to a GameObject to create a new path editor.

    public event System.Action pathUpdated;

    [SerializeField, HideInInspector]
    PathCreatorData editorData;
    [SerializeField, HideInInspector]
    bool initialized;

    // Vertex path created from the current bezier path
    public VertexPath path
    {
        get
        {
            if (!initialized)
            {
                InitializeEditorData(false);
            }
            return editorData.vertexPath;
        }
    }

    // The bezier path created in the editor
    public BezierPath bezierPath
    {
        get
        {
            if (!initialized)
            {
                InitializeEditorData(false);
            }
            return editorData.bezierPath;
        }
        set
        {
            if (!initialized)
            {
                InitializeEditorData(false);
            }
            editorData.bezierPath = value;
        }
    }

    #region Internal methods

    /// Used by the path editor to initialise some data
    public void InitializeEditorData(bool in2DMode)
    {
        if (editorData == null)
        {
            editorData = new PathCreatorData();
        }
        editorData.bezierOrVertexPathModified -= OnPathUpdated;
        editorData.bezierOrVertexPathModified += OnPathUpdated;

        editorData.Initialize(transform.position, in2DMode);
        initialized = true;
    }

    public PathCreatorData EditorData
    {
        get
        {
            return editorData;
        }

    }

    void OnPathUpdated()
    {
        if (pathUpdated != null)
        {
            pathUpdated();
        }
    }

    #endregion
    }
}

Так что это сработало очень хорошо, и мне понравилось.Я использовал это для моей системы трамвая.Но после этого мне нужно было создать камеру от третьего лица, и я написал такой код:

using UnityEngine;
using System.Collections;

public class CameraRotateAround : MonoBehaviour {

public Transform target;
public Vector3 offset;
public float sensitivity = 3;
public float limit = 80;
public float zoom = 0.25f;
public float zoomMax = 10; 
public float zoomMin = 3; 
private float X, Y;

void Start ()
{
    limit = Mathf.Abs(limit);
    if(limit > 90) limit = 90;
    offset = new Vector3(offset.x, offset.y, -Mathf.Abs(zoomMax)/2);
    transform.position = target.position + offset;
    offset.z -= zoom + 3;
}

void Update ()
{
    if(Input.GetAxis("Mouse ScrollWheel") > 0) offset.z += zoom;
    else if(Input.GetAxis("Mouse ScrollWheel") < 0) offset.z -= zoom;
    offset.z = Mathf.Clamp(offset.z, -Mathf.Abs(zoomMax), -Mathf.Abs(zoomMin));

    X = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivity;
    Y += Input.GetAxis("Mouse Y") * sensitivity;
    Y = Mathf.Clamp (Y, -limit, 0);
    transform.localEulerAngles = new Vector3(-Y, X, 0);
    transform.position = transform.localRotation * offset + target.position;
}
}

И после первых секунд геймплея все было хорошо, но камера начала отлетать от трамвая,Я действительно понятия не имею, что с этим делать и почему это происходит.

Видеоролик о взлете камеры подальше от трамвая: https://youtu.be/BXHnvq8bpPM. Спасибо за помощь.

...