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全景场景