一.可能出现的问题:
1.角色符合什么条件摄像机才能移动?
2.摄像机如何到达规定地点就会停止?
3.摄像机停止如何再让它动起来?
?
二.解决方案:
直接上代码。
public Transform me;//获取角色位置
private Vector3 mezb;//用来获取角色的屏幕坐标
private bool cameris1 = false;
private bool cameris2 = false;
public float camerseep;//相机移动速度
public float leftno;//左边界值
public float rightno;//右边界值
private void Update()
{
//将角色的世界位置转换为屏幕坐标
mezb = Camera.main.WorldToScreenPoint(me.position);
//判断摄像机是否小于左边界或大于右边界,如果符合条件就将摄像头停止
if (transform.position.x <= leftno)
{
cameris1 = true;
}
if (transform.position.x >= rightno)
{
cameris2 = true;
}
//这次判定是在摄像机已经停止的时候进行的,用来在停止的时候进行移动将摄像机脱离停止范围
if (mezb.x > 1000&& cameris1 == true)
{
transform.position += Vector3.right * Time.deltaTime * camerseep;
}
if (mezb.x < 480 && cameris2 == true)
{
transform.position += Vector3.left * Time.deltaTime * camerseep;
}
//脱离停止范围将判断条件关闭,方便之后的判断
if (transform.position.x > leftno && transform.position.x < rightno)
{
cameris1 = false;
cameris2 = false;
}
//相机移动条件
if (cameris1==false&&cameris2==false)
{
//此处判断的角色屏幕坐标x轴数值,与分辨率有关!
//屏幕的最左下角就是(0,0),也就是(x,y)
//例如:我的分辨率是1920*1080,那么我的最右上角为(1920,1080)
if (mezb.x > 1000)
{
transform.position += Vector3.right * Time.deltaTime * camerseep;
}
if (mezb.x < 480)
{
transform.position += Vector3.left * Time.deltaTime * camerseep;
}
}
}
如有不懂的地方可以评论区留言,若有不足!望请大佬指教。
|