如果你需要在主摄像机附近实例化一个物品/物品过渡动画移动到附近,并且摄像机旋转镜头角度也依然能保证物品始终跟随摄像机,那么你需要先了解这个方法:
ScreenToWorldPoint(x,y,z):屏幕坐标转化为世界坐标,通常和摄像机搭配使用。x与y是2D屏幕坐标,z是深度(摄像机的z轴方向)。如图蓝色箭头为z轴。
Camera.main:这是Tag标签为Main Camera的摄像机,刚创建unity场景的时候唯一的一个摄像机就是Main Camera标签的摄像机,之后创建的摄像机默认标签都不是Main Camera。
移动过渡动画:
current = Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta);
将当前值current往目标target方向移动; maxDistanceDelta是最大距离增量,也就是每次移动的最大长度,可以理解为速度; 返回值是:当current值加上maxDistanceDelta的值,如果这个值超过了target,返回的就是target的值,否则返回current。
更详细的说明可以参考这个:https://blog.csdn.net/andyhebear/article/details/51818534
物品实时动画移动到摄像机前的指定位置:
private Transform m_Transform;
private Vector3 Current; //物品初始位置.
private Vector3 Target; //物品目标位置.
void Start()
{
m_Transform = gameObject.GetComponent<Transform>();
Current = m_Transform.position; //初始化物品的初始位置.
}
void Update()
{
yd();
}
/// <summary>
/// 物品往摄像机位置进行动画移动并跟随.
/// </summary>
private void yd()
{
//初始化目标位置,目标位置为摄像机中心点前3米.
Target = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, 3));
//过渡动画,更改物品初始位置.
Current = Vector3.MoveTowards(Current, Target, 2 * Time.deltaTime);
m_Transform.position = Current;
}
?
|