全景图是我们非常实用的场景,会增加显示的场景效果,现在我们就来查看全景图的添加方法。
首先 我们准备一张全景图图片。 这个图片怎么做的呢, 这个要问你们的美术了,他们会做的的。 我本来想给准备一张, 奈何, 蛮牛上图大小限制, 我没办法上传了。
然后呢 ,我们在场景中创建一个 球体。
然后再创建一个空的物体 ,名字你随便起,我就起了个很长的名字, 毕竟一寸长一寸强
第三部,我们就要把一个摄像机放在这个 新建的空的物体里面,作为子物体。
然后 把 球体, 摄像机, 和这个空的物体 都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 }
热点新闻