当前位置: 移动互联网学院 > VR开发 > Unity3D实现全景图
Unity3D实现全景图 时间:2017-05-11     来源:移动互联网学院

全景图是我们非常实用的场景,会增加显示的场景效果,现在我们就来查看全景图的添加方法。

首先 我们准备一张全景图图片。 这个图片怎么做的呢, 这个要问你们的美术了,他们会做的的。 我本来想给准备一张, 奈何, 蛮牛上图大小限制, 我没办法上传了。 

然后呢 ,我们在场景中创建一个 球体。 

然后再创建一个空的物体 ,名字你随便起,我就起了个很长的名字, 毕竟一寸长一寸强

第三部,我们就要把一个摄像机放在这个 新建的空的物体里面,作为子物体。

然后 把 球体, 摄像机, 和这个空的物体 都reset 下 位置, 也就是位置都是 0,0,0  

这样 摄像机就在球体里面了。

下面就是写脚本和shader了 

[code]phpcode:

01 Shader "Unlit/Pano360Shader"

02 {

03    Properties

04 {

05    _MainTex("Base(RGB)", 2D) = "white"{}

06    _Color("Main Color", Color) = (1,1,1,0.5)

07 }

08 SubShader

09 {

10    Tags{ "RenderType" = "Opaque" }

11    //This is used to print the texture inside of the sphere

12    Cull Front

13    CGPROGRAM

14 #pragma surface surf SimpleLambert

15    half4 LightingSimpleLambert(SurfaceOutput s, half3 lightDir, half atten)

16 {

17    half4 c;

18    c.rgb = s.Albedo;

19    return c;

20 }

21

22 sampler2D _MainTex;

23 struct Input

24 {

25    float2 uv_MainTex;

26    float4 myColor : COLOR;

27 };

28

29 fixed3 _Color;

30 void surf(Input IN, inout SurfaceOutput o)

31 {

32    //This is used to mirror the image correctly when printing it inside of the sphere

33    IN.uv_MainTex.x= 1-IN.uv_MainTex.x;

34    fixed3 result = tex2D(_MainTex,IN.uv_MainTex)*_Color;

35    o.Albedo = result.rgb;

36    o.Alpha = 1;

37 }

38 ENDCG

39 }

40 Fallback "Diffuse"

41 }

这个shader 意思就是把图片做一个翻转 ,这样在球体内部看到图片也是正的。 

下面写一个控制摄像机旋转脚本

[code]csharpcode:

01 using UnityEngine;

02 using System.Collections;

03

04 public class Move : MonoBehaviour {

05

06    // Use this for initialization

07    void Start () {

08     

09    }

10     

11    // Update is called once per frame

12    void Update () {

13     

14        if(Input.GetKey(KeyCode.A))

15        {

16            transform.Rotate(new Vector3(0,1,0));

17        }

18        if (Input.GetKey(KeyCode.D))

19        {

20            transform.Rotate(new Vector3(0, -1, 0));

21        }

22    }

23 }