原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1030/144.html
Unity3D 2D游戏摄像机的跟随实现
今天我们常州手机游戏开发培训专家幻天网络这篇文章主要是实现一下2d游戏中相机的跟随,具体的教程如下:
新建一个Canvas,Canvas设置Render Mode为World Space。Event Camera为主摄像机。Rect Transform的Width:800,Height:480.
新建一个主角Test,为主角添加脚本。TestPlayer.cs.
新建两个空对象,分别为放在地图的左下角,和右上角。分别对 Left Down和Right 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工程资源破解