Здравствуйте. Имеется отличный скрипт CarCamera для автомобиля. Однако есть в нём лишний доработок, когда автомобиль двигается назад, камера тоже поворачивается назад и при этом теряется ориентир движение. Как изменить скрипт чтобы камера оставалась только в одном положение (смотрела только вперёд)?
using UnityEngine;
using System.Collections;

public class CarCamera : MonoBehaviour
{
	public Transform target = null;
	public float height = 1f;
	public float positionDamping = 3f;
	public float velocityDamping = 3f;
	public float distance = 4f;
	public LayerMask ignoreLayers = -1;

	private RaycastHit hit = new RaycastHit();

	private Vector3 prevVelocity = Vector3.zero;
	private LayerMask raycastLayers = -1;
	
	private Vector3 currentVelocity = Vector3.zero;
	
	void Start()
	{
		raycastLayers = ~ignoreLayers;
	}

	void FixedUpdate()
	{
		currentVelocity = Vector3.Lerp(prevVelocity, target.root.rigidbody.velocity, velocityDamping * Time.deltaTime);
		currentVelocity.y = 0;
		prevVelocity = currentVelocity;
	}
	
	void LateUpdate()
	{
		float speedFactor = Mathf.Clamp01(target.root.rigidbody.velocity.magnitude / 70.0f);
		camera.fieldOfView = Mathf.Lerp(55, 72, speedFactor);
		float currentDistance = Mathf.Lerp(7.5f, 6.5f, speedFactor);
		
		currentVelocity = currentVelocity.normalized;
		
		Vector3 newTargetPosition = target.position + Vector3.up * height;
		Vector3 newPosition = newTargetPosition - (currentVelocity * currentDistance);
		newPosition.y = newTargetPosition.y;
		
		Vector3 targetDirection = newPosition - newTargetPosition;
		if(Physics.Raycast(newTargetPosition, targetDirection, out hit, currentDistance, raycastLayers))
			newPosition = hit.point;
		
		transform.position = newPosition;
		transform.LookAt(newTargetPosition);
		
	}
}
Нужно наверно изменить вот это часть:
Vector3 newPosition = newTargetPosition - (currentVelocity * currentDistance);
Однако ни как не могу сообразить.Если знак минус изменить на плюс,то действительно меняется направление камера,но тогда при езде вперёд камера будет смотреть назад.Так тоже проблема не решается.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
48
5 лет назад
Отредактирован N7 Molot
0
возможно дело все в
target.root.rigidbody.velocity.magnitude
в установке значения float speedFactor; это скорость физического объекта, кода она равна отрицательной - камера разворачивается в другую сторону. Попробуй, прежде чем передавать фактор скорость, проверь его не отрицателен ли он, если да, тупо умнож его на -1.
Или ищи аналог запроса скорости. К примеру, если в контроллере у тебя скорость не отрицательная, то можно отталкиваться от неё.
0
48
5 лет назад
Отредактирован N7 Molot
0
получил инфу что не вышло, как делал что проверял?

вообще смещение камеры должно идти не по позиции цели, а по отделении от неё с нужными координатами на смещение.
0
17
5 лет назад
Отредактирован ledoed
0
currentVelocity = currentVelocity.normalized;=>
(

var v = currentVelocity.normalized;//'  это для мало букаф
currentVelocity= new Vector3(v.x,v.y,Mathf.abs(v.z));

)

transform.position = newPosition;=>
(
transform.localposition = newPosition;
)
пробни так и настрой машинку чтобы она смотрела в Z координату
0
1
5 лет назад
Отредактирован N7 Molot
0
ledoed, Я применил Ваш скрипт (вернее заменил этот часть), однако сразу же выдал ошибку. Этот скрипт Main Camera применяется версия 4.6 Unity, в других версиях видимо не подходит. Ну все ровно спасибо за ответ.
N7 Molot, Извините,но вы пишете такими загадками,я ведь не окончил программирование а обычный пользователь.Скрипт применяется в Unity v.4.6 и взял я этот скрипт по этому адресу. Здесь по автодвигатель всё хорошо объяснили и я разобрался, а вот по камеру ни каких объяснений, для меня это проблематично.
0
48
5 лет назад
0
Mansur:
Позже найду время разберу что да как работает. Но знание программирования всё равно нужны, хотя бы базовые.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.