• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

Unity3D 2D游戏摄像机的跟随实现

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1030/144.html

Unity3D 2D游戏摄像机的跟随实现

 

今天我们常州手机游戏开发培训专家幻天网络这篇文章主要是实现一下2d游戏中相机的跟随,具体的教程如下:

 

新建一个CanvasCanvas设置Render ModeWorld SpaceEvent Camera为主摄像机。Rect TransformWidth:800,Height:480.

新建一个主角Test,为主角添加脚本。TestPlayer.cs.

新建两个空对象,分别为放在地图的左下角,和右上角。分别对 Left DownRight Up进行赋值。

 

TestPlayer.cs

private Vector3 mTragetPos = Vector3.zero;

    void LateUpdate()

   

        mTragetPos = GetCameraMovePos();

        if (mTragetPos != Camera.main.transform.position)

       

            Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, mTragetPos, 10f);

       

   

    //地图左下角点

    public Transform LeftDown;

    //地图右上角的点

    public Transform RightUp;

    Vector3 GetCameraMovePos()

   

        Vector3 pos = this.transform.position;

        float screenX = SceneToWorldSize(Screen.width * 0.5f, Camera.main,

                                                pos.z);

        pos.y = Camera.main.transform.position.y;

        pos.z = Camera.main.transform.position.z;

        float maxX = RightUp.position.x;

        float minX = LeftDown.position.x;

        if (pos.x - screenX < minX)

       

            pos.x = minX + screenX;

       

        else if (pos.x + screenX > maxX)

       

            pos.x = maxX - screenX;

       

        return pos;

   

    /// <summary>

    /// 像素单位转世界单位

    /// </summary>

    /// <param name="size"></param>

    /// <param name="ca"></param>

    /// <returns></returns>

    public float SceneToWorldSize(float size, Camera ca, float Worldz)

   

        if (ca.orthographic)

       

            float height = Screen.height / 2;

            float px = (ca.orthographicSize / height);

            return px * size;

       

        else

       

            float halfFOV = (ca.fieldOfView * 0.5f);//摄像机夹角 的一半//

            halfFOV *= Mathf.Deg2Rad;//弧度转角度//

            float height = Screen.height / 2;

            float px = height / Mathf.Tan(halfFOV);//得到应该在的Z//

            Worldz = Worldz - ca.transform.position.z;

            return (Worldz / px) * size;

       

   



上篇:上一篇:UGUI实现简单的新手引导功能
下篇:下一篇:Unity工程资源破解