#c# #object #unity3d
#c# #объект #unity-game-engine
Вопрос:
я работаю над проектом, и мне нужна помощь, чтобы объект следовал за другим объектом, но в то же время один конец должен указывать на камеру.Я пробовал метод LookAt, но он не работает должным образом.
Комментарии:
1. Пожалуйста, поделитесь тем,
LookAt
что вы пробовали, а также было бы полезно, если бы вы могли уточнить, как объект должен следовать за другим объектом.2. gun.transform. Посмотрите (Camera.main.transform.position); gun.transform.position=enemy.position;
3. Ну, во-первых, вам не нужно беспокоиться о серверной части пистолета. Вы можете просто изначально поместить его перед камерой и просто использовать
LookAt
4. это AR-игра, поэтому размещение объекта перед камерой не работает.
5. Это сработало бы, если вы его закрепите
Ответ №1:
LookAt
отлично работает для 3D-объектов.
Это возможности, которые LookAt
могут не сработать так, как вы ожидаете:
- Вы хотите, чтобы 2D объект смотрел в точку.
- Визуально рассматриваемая передняя сторона объекта не является его стороной x . главным образом потому, что:
- 3D-модель небрежно изготовлена с использованием стороннего программного обеспечения.
- Объект находится внутри другого объекта и поворачивается на своем месте.
- Вы манипулируете вращением объекта в другом месте.
Ответ №2:
Указать другой объект действительно просто. Вам нужно только использовать LookAt, вот так:
GameObject target;
transform.LookAt(target.transform);
Для следования за целью я вижу несколько назначений. Вы можете, например, заставить объект также использовать скрипт с LookAt, и когда вы перемещаете основной объект, перемещайте также follower.
Другим, более сложным способом было бы установить максимальное расстояние разделения, на котором объект будет двигаться к своей цели. В этом случае также использовался бы 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;
}
Вы должны прикрепить это к обновлению или программе Couroutine.
Ответ №3:
Конкретный объект направляется прямо к целевому объекту следующим образом:
//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;
}
Ответ №4:
Решение
Просто унаследуйте желаемый объект от основного игрового объекта с основным игровым объектом, который является вашим игроком.Я никогда не использовал какой-либо скрипт c # code для этой цели. если вы хотите следовать за двумя объектами, чтобы они следовали друг за другом, просто унаследуйте основной игровой объект . Таким образом, второй игровой объект будет следовать за требуемым основным игроком. Камера также будет унаследована, если вы хотите, чтобы камера следовала за ними обоими. Что касается точек камеры, вам нужно поиграть с unity tool и настроить оси x, y и z в соответствии с положением камеры. Я бы предложил поместить камеру перед обоими игровыми объектами и просто повернуть камеру лицевой стороной к игровым объектам.