unity3d-使相机跟随玩家移动

首先介绍两个重要的方法:
1.FixedUpdate():官方解释是,当我们处理受力物体的时候,需要使用FixedUpdate()而不是Update(),当你为一个刚体加上作用力后,你需要在FixedUpdate()方法中处理这个力。我的个人理解是,FixedUpdate()是框架的一种固定帧,它是用来处理受力物体的变化的,如位移等。
2.Mathf.SmoothDamp():官方解释是,public static float SmoothDamp(float current,float target,ref float currentVelocity,
float smoothTime,float maxSpeed = Mathf.Infinity,float deltaTime = Time.deltaTime);该值由一些类似弹簧-减振器的功能平滑化,而这些功能永远不会超调。该函数可用于平滑任何类型的值、位置、颜色、标尺。个人理解是,用于处理位置、颜色、值等的变化,使得他们的变化变得平滑、真实,而不是僵硬的。

例子:使相机跟随玩家移动
1.给Camera挂上脚本
2.编写脚本

public class CamaraFollow : MonoBehaviour {
    private Transform target;
    private Vector3 offset;
      private void Update()
      {
        if(target==null  && GameObject.FindGameObjectWithTag("Player")!=null)
        {
            target = GameObject.FindGameObjectWithTag("Player").transform;//找到玩家
            offset = target.position - transform.position;//初始化偏移量
        }
      }  
     private void FixedUpdate()
     {
        if(target!=null)
        {
            //返回的是一个到达的目标值
            float posX = Mathf.SmoothDamp(transform.position.x, target.position.x - offset.x,ref velocity.x,0.05f);
            float posY = Mathf.SmoothDamp(transform.position.y, target.position.y - offset.y, ref velocity.y, 0.05f);            //如果目标的y比相机的y还大(目标在上方)就更新相机的位置
            if(posY>transform.position.y)
                transform.position = new Vector3(posX, posY, transform.position.z);
        }
     }
}

你可能感兴趣的:(unity)