Когда камера следит за мячом, кто должен контролировать положение камеры?Мяч или сама камера? - PullRequest
2 голосов
/ 17 июня 2019

Я изучаю Unity3D и сейчас создаю тривиальную (бесполезную) игру следующим образом.

enter image description here

Мяч катится по наклонному полу и камерадолжен следовать за мячом со следующим соотношением

  • x camera = x ball
  • y camera = y ball + 3
  • z камера = z - 10

Существует два возможных способа управления положением камеры.

Шар управляет камерой

В этом сценарииЯ прикрепляю к шару следующий скрипт:

public class Ball : MonoBehaviour
{
    [SerializeField]
    private Transform cameraTransform;

    void Start() { }

    void Update()
    {
        Vector3 newCameraPos = new Vector3
        {
            x = transform.position.x,
            y = transform.position.y + 3f,
            z = transform.position.z - 10f
        };
        cameraTransform.position = newCameraPos;
    }
}

Камера управляет собой

В этом сценарии я прикрепляю к камере следующий скрипт:

public class Camera : MonoBehaviour
{

    [SerializeField]
    private Transform ballTransform;

    void Start() { }


    void Update()
    {
        Vector3 newCameraPos = new Vector3
        {
            x = ballTransform.position.x,
            y = ballTransform.position.y + 3f,
            z = ballTransform.position.z - 10f
        };
        this.transform.position = newCameraPos;
    }
}

Вопрос

Несмотря на то, что оба метода работают должным образом, мне интересно, есть ли плюсы и минусы для каждого метода.Какой я должен использовать?

1 Ответ

4 голосов
/ 17 июня 2019

Как вы уже упоминали, оба примера работают как положено.

Что мне нравится делать, так это назначать функциональность объекту, который отвечает за выполнение "действия".В этом случае камера «следит» за чем-то.В данный момент он следует за мячом, но позже, если вы хотите, чтобы он следовал чему-то другому, имеет ли смысл переходить к объекту игры с мячом, чтобы изменить это поведение?Я думаю, что нет.

Назначая функциональность объектам на основе «обязанностей», вы часто обнаруживаете, что ваш код в конечном итоге оказывается гораздо более модульным.

Конечно, такая практиканет ничего нового в разработке игр или разработке программного обеспечения вообще.Он дополняет Принцип единой ответственности и разделяет многие его качества.

Но, в конце концов, если вы работаете только над своим кодом, то вы будете знать базу коданаизнанку.Так что вам решать!

Я бы также предложил создать Components исходя из этих обязанностей, когда это возможно.Поэтому вместо одного общего компонента Camera я бы создал компонент FollowTarget и прикрепил бы его к камере.При этом у вас будет возможность использовать тот же самый Component, чтобы заставить какой-то другой произвольный объект следовать за другим произвольным объектом в вашей игре.

Счастливого обучения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...