(1) if Obj moves
Создать атрибут Vector3 deltaPosition
в коде Cam. Инициализируйте его, оценив расстояние между Cam и Obj.
void Start(){
deltaPosition = transform.position - Obj.transform.position;
}
В Update()
убедитесь, что Cam находится на том же расстоянии от Obj, где оно находится:
void Update(){
transform.position + deltaPosition;
}
(2) if Obj rotates
Предположим, что Obj находился под углами Эйлера (x0, y0, z0) и повернулся к углам Эйлера (x1, y1, z1). Все, что вам нужно сделать, это повернуть deltaPosition
(x1 - x0, y1 - y0, z1 - z0) градусов вокруг положения Obj. Для этого вы также должны сохранить начальное вращение Obj в другом атрибуте Vector3 objRotation
:
void Start(){
deltaPosition = transform.position - Obj.transform.position;
objRotation = Obj.transform.eulerAngles;
}
и убедиться, что он корректно корректируется каждый кадр:
void Update(){
deltaPosition = RotatePointAroundPivot(
deltaPosition,
Obj.transform.position,
Obj.transform.eulerAngles - objRotation
);
transform.position + deltaPosition;
objRotation = Obj.transform.eulerAngles;
}
public Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, Vector3 angles) {
return Quaternion.Euler(angles) * (point - pivot) + pivot;
}
Это должно сделать трюк.