AR互动大屏丨Dinosaur_BigScreen

2024-08-14 16:53:39 浏览数 (2)

视频展示及项目文件

视频展示:Dinosaur_BigScreen_Vedio

项目文件:Dinosaur_BigScreen_File

制作思路

Dinosaur_BigScreen采用EasyAR SDK,制作过程类似普通的显示操作过程——将模型叠加在真实环境中,用摄像头看到真实环境,通过键盘或内置的自动动作系统,完成模型的运动

1、新建一张Plane作为地面,Plane坐标归零

2、在地面行走的物体,脚要附在地面上

3、Plane附加一个shader“ShadowOnly”(附录),用来接收模型阴影,并将面片透明,透明后便能看到现实中的地面

4、制作天空盒,用全景照片作为天空盒,用于给模型模拟真实光照效果。天空盒可在Scene里面关闭,但关照效果依旧可添加到模型身上

全景照片可用手机拍摄三张上、中、下三个角度全景照片,用PS合成一张全景照片

5、设置模型动画、声音等控制策略

6、发布项目

天空盒制作过程

1、全景照片在Unity中的设置:

2、天空盒材质设置:

3、Lighting-Environment-Skybox Material设置:

部分代码展示

a、控制声音播放速度

代码语言:javascript复制
        GetComponent<AudioSource>().clip = BarkAudioClip;
        GetComponent<AudioSource>().pitch = 2f;
        GetComponent<AudioSource>().Play();

b、更改屏幕分辨率

代码语言:javascript复制
Screen.SetResolution(1366, 768, true);

Unity事件的运用

我们可通过代码形式控制播放声音,同样,我们也可以用另外一种形式,在模型的Animation Clip中添加事件的方式,完成声音在合适时机时的播放

1、完成播放声音的方法,注意,脚本中的该部分代码独立于所有API之外,仅供外部调用,并没有在代码中就实现播放功能

代码语言:javascript复制
public void Au_Bark()
    {
        GetComponent<AudioSource>().clip = BarkAudioClip;
        GetComponent<AudioSource>().pitch = 2f;
        GetComponent<AudioSource>().Play();
    }

2、在模型的Perfab-Animation中找到对应的动画

3、点击该动画的Events,可根据下面的动画,在合适时机点击 号,添加事件。Object选上播放声音的脚本,Function填入脚本中控制声音播放的方法,Apply

4、Enjoy

附录:

Shader:ShadowOnly

代码语言:javascript复制
Shader "FX/Matte Shadow" {
 
Properties {
    _Color ("Main Color", Color) = (1,1,1,1)
    _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
    _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
 
SubShader {
    Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
    LOD 200
    Blend Zero SrcColor
 
CGPROGRAM
 
#pragma surface surf ShadowOnly alphatest:_Cutoff
 
fixed4 _Color;
 
struct Input {
    float2 uv_MainTex;
};
 
inline fixed4 LightingShadowOnly (SurfaceOutput s, fixed3 lightDir, fixed atten)
{
    fixed4 c;
    c.rgb = s.Albedo*atten;
    c.a = s.Alpha;
 
    return c;
}
 
void surf (Input IN, inout SurfaceOutput o) 
{
    fixed4 c = _Color; 
    o.Albedo = c.rgb;
    o.Alpha = 1;
}
 
ENDCG
}
 
Fallback "Transparent/Cutout/VertexLit"
}

0 人点赞