есть ли способ заставить объект следовать за другим объектом и всегда указывать / смотреть на камеру - PullRequest
0 голосов
/ 28 марта 2019

Я работаю над проектом и мне нужна помощь, чтобы объект следовал за другим объектом, но в то же время один конец должен указывать на камеру. Я пробовал метод lookAT, но он не работает должным образом.

Ответы [ 4 ]

1 голос
/ 28 марта 2019

LookAt отлично работает для 3D-объектов.

Возможности, которые LookAt могут работать не так, как вы ожидаете:

  1. Вы хотите 2D объект для наблюдения за точкой.
  2. Визуально рассматриваемая передняя сторона объекта не его сторона x +.главным образом потому, что:
    • 3D-модель небрежно изготовлена ​​с использованием стороннего программного обеспечения.
    • Объект находится внутри другого объекта и вращается на своем месте.
  3. Вы манипулируете вращением объекта в другом месте.
0 голосов
/ 30 марта 2019

Конкретный объект направляется прямо к целевому объекту следующим образом:

//Declare a variable that points to a specific object and a target obj variable
public GameObject obj1;
public GameObject obj2;

GameObject targetObj;

// Update is called once per frame
void Update()
{
    if (Input.GetKeyUp(KeyCode.Alpha1))
        OnChangedTarget(obj1);

    if (Input.GetKeyUp(KeyCode.Alpha2))
        OnChangedTarget(obj2);

    UpdateObjPos(Camera.main.gameObject);
}

//Keep distance from target obj
void UpdateObjPos(GameObject followObj, float width = 10f, float height = 10f)
{
    if (targetObj == null)
        return;

    followObj.transform.LookAt(targetObj.transform);

    float posX = targetObj.transform.position.x + width;
    float posY = targetObj.transform.position.y + width;
    float posZ = targetObj.transform.position.z + height;

    followObj.transform.position = new Vector3(posX, posY, posZ);
}

//Declare function to select target obj
void OnChangedTarget(GameObject obj)
{
    Debug.Log("Target Changed : " + obj.name);
    targetObj = obj;
}
0 голосов
/ 28 марта 2019

Решение

Просто наследуйте желаемый объект от основного игрового объекта с основным игровым объектом, которым является ваш игрок. Я никогда не использовал для этой цели какой-либо скрипт на языке c #. если вы хотите следовать двум объектам, чтобы следовать друг за другом, просто наследуйте основной игровой объект. Таким образом, второй игровой объект будет следовать за основным игроком. Камера также будет наследоваться, если вы хотите, чтобы камера следовала за ними обоими. Что касается точек, касающихся камеры, вам нужно поиграть с помощью инструмента «Единство» и отрегулировать оси x, y и z в соответствии с положением камеры. Я бы предложил поставить камеру перед обоими игровыми объектами и просто повернуть лицо камеры к игровым объектам.

фотография

The example of inherited game object with camera

0 голосов
/ 28 марта 2019

Указание другого объекта действительно просто. Вам нужно только использовать LookAt , например:

GameObject target;

transform.LookAt(target.transform);

Для достижения цели я вижу несколько аплодисментов. Например, вы можете сделать так, чтобы объект также использовал скрипт с LookAt, а когда вы перемещаете основной объект, перемещаете также и последователя. Другим более сложным способом было бы установить максимальное расстояние, на котором объект будет двигаться к своей цели. Этот также будет использовать LookAt. Если вы выбрали последний, вы можете сделать что-то вроде этого:

const float MaxDistance = 5.0f // The maximum distance the target can go away before following it.
float speed = 2.0f;

if(Vector3.Distance(transform.position, target.transform.position) > MaxDistance)
{
    transform.LookAt(target.transform);

    transform.position += Vector3.forward * speed * Time.deltaTime;
}

Вы должны прикрепить это к Обновлению или Курсу.

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