Unity3d 限制摄影机移动,摄影机移动超出边界

Unity3d 限制摄影机移动,摄影机移动超出边界,unity3d,zooming,limit,pinchzoom,pinch,Unity3d,Zooming,Limit,Pinchzoom,Pinch,我正在为我的手机游戏创建一个简单的相机平移和滚动,需要一些帮助。 现在有了代码,我有一个播放器可以滚动我创建的地图。 我从youtube视频中获得了代码(用于上下文) 你知道我怎样才能解决这个问题吗 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 使用UnityEngine.UI; 公共类ScrollAndPinch:单一行为 { #如果UNITY|u IOS | UNITY|u ANDROID 公共摄像机; 公共图书馆; 受保护平面

我正在为我的手机游戏创建一个简单的相机平移和滚动,需要一些帮助。 现在有了代码,我有一个播放器可以滚动我创建的地图。 我从youtube视频中获得了代码(用于上下文)

你知道我怎样才能解决这个问题吗

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共类ScrollAndPinch:单一行为
{
#如果UNITY|u IOS | UNITY|u ANDROID
公共摄像机;
公共图书馆;
受保护平面;
公共转换图;
浮动距离;
私人空间
{
如果(摄像机==null)
Camera=Camera.main;
Input.multiTouchEnabled=真;
}
私有void更新()
{
//更新平面
如果(Input.touchCount>=1)
平面设置法线和位置(transform.up,transform.position);
var Delta1=向量3.0;
var Delta2=向量3.0;
//卷轴
如果(Input.touchCount>=1)
{
Delta1=平面位置delta(Input.GetTouch(0));
if(Input.GetTouch(0.phase==TouchPhase.Moved)
相机。变换。转换(Delta1,空间。世界);
}
}
受保护矢量3平面位置增量(触摸)
{
//不动
如果(touch.phase!=touch.phase.Moved)
返回向量3.0;
//三角洲
var rayBefore=摄影机.screenpointoray(touch.position-touch.deltaPosition);
var rayNow=Camera.screenpointoray(touch.position);
if(Plane.Raycast(rayBefore,out-var-enterBefore)和&Plane.Raycast(rayNow,out-var-enterNow))
返回rayBefore.GetPoint(enterBefore)-rayNow.GetPoint(enterNow);
//不在飞机上
返回向量3.0;
}
受保护矢量3平面位置(矢量2屏幕位置)
{
//位置
var rayNow=Camera.screenpointoray(screenPos);
if(平面光线投射(光线现在,光线现在)
返回rayNow.GetPoint(enterNow);
返回向量3.0;
}
#恩迪夫

}
您可以在更新控件中添加区域边界,如下所示:

if(Camera.transform.position.x > valuexmax || Camera.transform.position.x < valuexmin
      || Camera.transform.position.y > valueymax || Camera.transform.position.y < valueymin)
   {
     InBounds = false; //just a bool variable set to true in start
   }

因此,我添加了您所说的内容,但没有出现错误(这很好,您可以设置if(InBounds==true)在它里面使用一个名为OldPos的变换变量,设置OldPos=Camera.transform.position,然后如果InBounds=false,你可以将相机位置设置为OldPos,如果它不工作,那么在X上设置OldPos-0.1,在Y上设置-0.1,这样它应该可以再次移动相机。希望它有用谢谢你。这真的帮助了我。酷!如果是你找到我的话不要投票!
if (Input.touchCount >= 1 && InBounds == true)
    {
        Delta1 = PlanePositionDelta(Input.GetTouch(0));
        if (Input.GetTouch(0).phase == TouchPhase.Moved)
            Camera.transform.Translate(Delta1, Space.World);
    }

if(InBounds == false)
{   
      // reset position
 }