我正在从事一个项目,需要帮助使一个物体跟随另一个物体,但同时一端应指向相机。我尝试了lookAT方法,但它无法正常工作。
答案 0 :(得分:1)
LookAt
非常适合3D对象。
LookAt
可能无法按预期工作:
答案 1 :(得分:0)
指向另一个对象真的很简单。您只需要使用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;
}
您应该将此附加到更新程序或Couroutine。
答案 2 :(得分:0)
特定对象直接进入目标对象,如下所示:
//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;
}
答案 3 :(得分:-1)