1.全景图导入项目中,设置属性如下:
Texture Type:Default
Texture Shape:Cube
此选项将纹理定义为立方体贴图。例如,可将其用于天空盒或反射探针。
Mapping:Latitude Longitude (Cylindrical)
将纹理映射到 2D 纬度/经度表示形式。
Wrap Mode:Clamp
2.创建材质,材质类型为Skybox/Cubemap
点选Cubemap(HDR),选择贴图
3. Window/Rendering/Lighting Settings 将刚刚创建的Material给Skybox
4.通过调节Camera的Rotation X、Rotation Y和Filed of View来观看360全景图。
public class NewBehaviourScript : MonoBehaviour
{
public float speedX=5f;
public float speedY=5f;
public float speedZoom=30f;
float rotateX,rotateY;
Camera camera;
float fov;
void Start()
{
rotateX = transform.eulerAngles.x;
rotateY = transform.eulerAngles.y;
camera = GetComponent<Camera>();
fov = camera.fieldOfView;
}
void Update()
{
if(Input.GetMouseButtonDown(0)){
rotateX = transform.eulerAngles.x;
rotateY = transform.eulerAngles.y;
}
if(Input.GetMouseButton(0)){
rotateX = Input.GetAxis("Mouse Y")*speedX;
rotateY = Input.GetAxis("Mouse X")*speedY;
rotateX = ClampAngles(rotateX,-50,50);
rotateY = ClampAngles(rotateY,-360,360);
this.transform.eulerAngles =new Vector3(rotateX,rotateY,0);
}
fov -= Input.GetAxis("Mouse ScrollWheel")*speedZoom;
fov = Mathf.Clamp(fov,20,100);
camera.fieldOfView = fov;
}
float ClampAngles(float angle,float min,float max){
if (angle < -360){
angle = 360;
}
if( angle > 360){
angle -= 360;
}
return Mathf.Clamp(angle,min,max);
}
}
思考:
如何实现按住自动旋转的效果?
尝试使用Input.mousePosition记录鼠标按下的坐标和鼠标按住的坐标,求出坐标的差,然后使用Rotate函数在x,y轴上进行旋转。这时可以实现按住自动旋转的效果,但是会出现Z轴旋转的情况,如何解决?
public Texture[]textures;
public Material mat;
void Start()
{
mat.SetTexture("_Tex",textures[1]);
}
使用拖动赋值,对材质、贴图进行赋值。
使用Material类中的SetTexture方法切换贴图。
思考:
添加景点介绍、交互,实现点击图片切换360全景场景