在相机和 canvas 之间保持相同的距离
Keep the same distance between the camera and a canvas
想法是将相机移动到 canvas 前面的某个点。我已经为第一个 canvas 定位了相机,当相机移动到另一个 canvase 时我需要保持这个距离(canvases 是相等的,它们只是有不同的位置和旋转角度)。
所以问题是如何与 canvas 中心保持相同的相机距离?
这取决于 canvas 的方向。如果你把它们定位成正方形
|__|你可以简单地把凸轮放在正中间然后变换 90°
如果您需要不同的距离,请将它们移得更远,然后这样做
/ \
| ○ |在中间的圆圈上,您可以在外缘移动相机。 canvas 方向需要与最近的圆切线平行。您可以通过在中间放置一个假想的(或空的游戏对象)并保持与该对象的距离来使其在曲线上移动。
将此脚本放在游戏对象(如相机)上。
分配 camera、canvases 和 distance 变量。
希望这会有所帮助:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class CanvasPositioner : MonoBehaviour {
public Camera cam;
public Canvas[] canvases;
public float distance = 15;
private float xPos;
private float yPos;
private float zPos;
private float angle;
void PositionCanvases(){
for(int i = 0; i < canvases.Length; i++){
angle = canvases[i].transform.eulerAngles.y;
xPos = cam.transform.position.x + distance * Mathf.Sin(Mathf.Deg2Rad* angle);
yPos = cam.transform.position.y;
zPos = cam.transform.position.z + distance * Mathf.Cos(Mathf.Deg2Rad * angle);
canvases[i].transform.position = new Vector3(xPos,yPos,zPos);
}
}
void LateUpdate () {
PositionCanvases();
}
}
想法是将相机移动到 canvas 前面的某个点。我已经为第一个 canvas 定位了相机,当相机移动到另一个 canvase 时我需要保持这个距离(canvases 是相等的,它们只是有不同的位置和旋转角度)。
所以问题是如何与 canvas 中心保持相同的相机距离?
这取决于 canvas 的方向。如果你把它们定位成正方形
|__|你可以简单地把凸轮放在正中间然后变换 90°
如果您需要不同的距离,请将它们移得更远,然后这样做
/ \ | ○ |在中间的圆圈上,您可以在外缘移动相机。 canvas 方向需要与最近的圆切线平行。您可以通过在中间放置一个假想的(或空的游戏对象)并保持与该对象的距离来使其在曲线上移动。
将此脚本放在游戏对象(如相机)上。
分配 camera、canvases 和 distance 变量。
希望这会有所帮助:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class CanvasPositioner : MonoBehaviour {
public Camera cam;
public Canvas[] canvases;
public float distance = 15;
private float xPos;
private float yPos;
private float zPos;
private float angle;
void PositionCanvases(){
for(int i = 0; i < canvases.Length; i++){
angle = canvases[i].transform.eulerAngles.y;
xPos = cam.transform.position.x + distance * Mathf.Sin(Mathf.Deg2Rad* angle);
yPos = cam.transform.position.y;
zPos = cam.transform.position.z + distance * Mathf.Cos(Mathf.Deg2Rad * angle);
canvases[i].transform.position = new Vector3(xPos,yPos,zPos);
}
}
void LateUpdate () {
PositionCanvases();
}
}