У меня действительно странная проблема.Я скачал "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. Спасибо за помощь.