Народ до боли избитая тема,игра от третьего лица ,и камера проходит сквозь "текстурки"(стены и тд),контроллер из стандартного ассета не вариант, вот скрин
и еще//света нет просто так-то графа пойдет))
//видел здесь же способ создания пустышки кидания не нее колайдер и удочерять камеру на пустышку не помогло
Сообщение отредактировал malis1 - Вторник, 04 Июля 2017, 23:26
beril, я думаю, у него проблема в том, что когда камера летает за персонажем, она просто пролетает сквозь стены, игнорируя коллайдеры, поэтому первый совет не решит этой проблемы (но поможет, когда она уже будет решена, кстати).
malis1, главное, чтобы камера не была дочерней к персонажу, так тебе будет сложнее сделать её движение. Нужно двигать за персонажем через скрипт, тогда вариант с коллайдером может частично помочь. Долгожданный анонсик: State of War
malis1, вариантов реализовать это много. Но есть один простой - сделать камеру, которая отдалена от игрока на определенное расстояние, на камеру повесить ригидбоди без гравитации, и коллайдер-триггер. Если в триггере есть объект - камера приближается к игроку, если объекта нет - камера отдаляется. Моя команда
Сообщение отредактировал shizofren - Среда, 05 Июля 2017, 19:33
shizofren, будет некорректно работать при тонкий стене между камерой и персонажем. Например, пройти в дверь и уйти в сторону - камера не будет коллизится со стеной. Рейкаст самый нормальный вариант. «Смерти меньше всего боятся те люди, чья жизнь имеет наибольшую ценность.» Иммануил Кант
Я рейкастом реализовывал без всяких коллайдеров. Камера, как отдельный объект со своим скриптом, стремится к точке позади игрока и смотрит на него. Раз в N времени рейкаст и если не достигает игрока, то движется на игрока.
if (_player != null) { //смотрит всегда на игрока _playerDirection = ((_player.transform.position + _playerHead) - transform.position).normalized; transform.rotation = Quaternion.Lerp (transform.rotation, Quaternion.LookRotation (_playerDirection), rotateSpeed * Time.deltaTime);
//двигается за игроком, если тот далеко if (Vector3.Distance (transform.position, _player.transform.position) > maxDistance) _canMove = true;
//...или если вид перекрыт чем-то //пуляем луч в середину игрока if (Physics.Raycast (transform.position, (_player.transform.position - transform.position) + _playerHead / 2f, out _hit, 1000f)) { //если игрок не в зоне видимости if (!_hit.transform.CompareTag ("Player")) { _canMove = true; _playerVisible = false; } }
// если игрок видим, то камера где-то вдали позади if (_playerVisible) _backPosition = _player.transform.position + _playerHead - (_player.transform.forward * backDistance); // камера несётся поближе к игроку else _backPosition = _player.transform.position + _playerHead - _player.transform.forward; _backPosition.y += maxYPos; } }
malis1, вариантов реализовать это много. Но есть один простой - сделать камеру, которая отдалена от игрока на определенное расстояние, на камеру повесить ригидбоди без гравитации, и коллайдер-триггер. Если в триггере есть объект - камера приближается к игроку, если объекта нет - камера отдаляется.
Какое зверство :D. Честно говоря, когда сам столкнулся с этой проблемой, что я только не вытворял с этими ригитбодями =)