unity 调用c如何调用 vignette

1948人阅读
Shader(115)
Unity3D(148)
说起夜视仪,肯定都会想到屏幕上发绿的游戏特效
夜视仪效果经常用在FPS(第一人称射击)游戏中,
先来看下我们的实现效果:
感觉还不错
本次shader需要用到三种贴图:
1.晕影贴图:
给人一种正带着夜视仪的感觉
2.噪波贴图:
产生雪花状噪波
3.扫描线贴图:
增加夜视仪的真实感
先建立一个shader
先浏览一下变量:
_ScanLineTileTex; 扫描线效果的贴图
噪波贴图:
基于两种颜色或材质的交互创建曲面的随机扰动
通过对两种颜色随机混合,生成噪波效果
&_NoiseTex; 噪波贴图
_VignetteTex;晕影贴图
_Contrast;对比度
& 颜色的鲜明程度
_Brightness;亮度
&& &&& &&& &
_RandomValue;随机值,用在噪波贴图随机uv扰动
_distortion;桶形畸变的扭曲程度
_scale;屏幕放缩比例
_ScanLineTileAmount;扫描线数量(不是确切数量,指程度大小)
_NoiseXS噪波x方向速度
_NoiseYS噪波y方向速度
_NightVisionC夜视仪颜色
Properties {
_MainTex (&Base (RGB)&, 2D) = &white& {}
_Contrast(&Contrast&, Range(0, 4)) = 2
_Brightness (&Brightness&, Range(0, 2)) = 1
_NightVisionColor (&Night Vision Color&, Color) = (1, 1, 1, 1)
_RandomValue (&RandomValue&, Float) = 0
_distortion(&distortion&, Float) = 0.2
_scale(&scale&, Float) = 0.8
_VignetteTex(&Vignette Texture&, 2D) = &white& {}
_ScanLineTileTex(&Scan Line Tile Texture&, 2D) = &white& {}
_ScanLineTileAmount(&Scan Line Tile Amount&, Float) = 4.0
_NoiseTex(&Noise Texture&, 2D) = &white& {}
_NoiseXSpeed(&Noise X Speed&, Float) = 100.0
_NoiseYSpeed(&Noise Y Speed&, Float) = 100.0
我们还要声明一下:
#pragma vertex vert_img&&& 传入的像素信息为vert_img
#pragma fragment frag
&&& 片元着色函数为frag
#pragma fragmentoption ARB_precision_hint_fastest&
片元着色选项。ARB_precision_hint_fastest使用这个标志可以fp16的对像素进行运算,加快渲染
#pragma vertex vert_img
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
镜头桶形失真校正算法,产生桶形畸变效果
将矩形物体拍摄成四边向外凸形成桶形的影像,就称镜头具有负畸变,或桶形畸变
一会需要用此对uv进行变换
传入uv值float2 coord
传出扭曲的uv值
产生了镜头的感觉,增加真实感
float2 barrelDistortion(float2 coord)
float2 h = coord.xy - float2(0.5, 0.5);
float r2 = h.x * h.x + h.y * h.y;
float f = 1.0 + r2 * (_distortion * sqrt(r2));
return f * _scale * h + 0.5;
然后我们开始在frag函数中对片元进行着色
从刚才的桶形畸变函数传出经过处理得uv值distortedUV
获得当前传入摄像头的像素信息renderTex
获取晕影贴图像素信息
vignetteTex = tex2D(_VignetteTex, distortedUV);&& &
扫描线uv 可控扫描线数量
scanLinesUV = half2(i.uv.x * _ScanLineTileAmount, i.uv.y * _ScanLineTileAmount);
获取扫描线贴图像素信息
scanLineTex = tex2D(_ScanLineTileTex, scanLinesUV);
噪波贴图uv
根据时间与随机值变换uv产生扰动效果
noiseUV = half2(i.uv.x + (_RandomValue * _SinTime.z * _NoiseXSpeed),i.uv.y + (_Time.x * _NoiseYSpeed));
获取噪波贴图像素信息
fixed4 noiseTex = tex2D(_NoiseTex, noiseUV);
lum 即 luminosity 亮度值
lum = dot (fixed3(0.299, 0.587, 0.114), renderTex.rgb);
lum += _B//加上可自控的亮度
使饱和度调为零,变成黑白效果,再与夜视镜颜色混合
fixed4 finalColor = (lum *2) + _NightVisionC
再与三种贴图颜色混合得到最终颜色值
finalColor = pow(finalColor, _Contrast);
finalColor *= vignetteT
finalColor *= scanLineTex * noiseT
shader就ok了
fixed4 frag(v2f_img i/*像素信息*/) : COLOR// 片元着色函数
half2 distortedUV = barrelDistortion(i.uv);
//桶形畸变uv
fixed4 renderTex = tex2D(_MainTex, distortedUV);
fixed4 vignetteTex = tex2D(_VignetteTex, distortedUV); //晕影贴图
//扫描线uv 可控扫描线数量
half2 scanLinesUV = half2(i.uv.x * _ScanLineTileAmount, i.uv.y * _ScanLineTileAmount);//_ScanLineTileAmount大小无限制
fixed4 scanLineTex = tex2D(_ScanLineTileTex, scanLinesUV);
//噪波贴图uv
half2 noiseUV = half2(i.uv.x + (_RandomValue * _SinTime.z * _NoiseXSpeed),i.uv.y + (_Time.x * _NoiseYSpeed));
fixed4 noiseTex = tex2D(_NoiseTex, noiseUV);
//lum = luminosity 亮度
fixed lum = dot (fixed3(0.299, 0.587, 0.114), renderTex.rgb);
lum += _B//加上可自控的亮度
//饱和度调为零,变成黑白效果,再与夜视镜颜色混合
fixed4 finalColor = (lum *2) + _NightVisionC//
finalColor = pow(finalColor, _Contrast);//对比度
finalColor *= vignetteT//与晕影贴图混合
finalColor *= scanLineTex * noiseT
return finalC
接下来看看放入摄像头中的c#脚本
建立一个c#脚本
先赋予变量,与上面的shader的变量都差不多,
这就是一会要传入shader的值
&span style=&font-size:12&& #region Variables
public Shader nightVisionS
public float contrast = 2.0f;
public float brightness = 1.0f;
public Color nightVisionColor = Color.
public Texture2D vignetteT
public Texture2D scanLineT
public float scanLineTileAmount = 4.0f;
public Texture2D nightVisionN
public float noiseXSpeed = 100.0f;
public float noiseYSpeed = 100.0f;
public float distortion = 0.2f;
public float scale = 0.8f;
private float randomValue = 0.0f;
private Material curM
#endregion&/span&
动态建立一个纹理
&span style=&font-size:12&& #region Properties
Material material
if(curMaterial == null)
curMaterial = new Material(nightVisionShader);
curMaterial.hideFlags = HideFlags.HideAndDontS
return curM
#endregion&/span&
依旧需要 OnRenderImage()这个函数抓取摄像机的图像
然后我们把各种变量传入shader
通过 Graphics.Blit() 这个函数
可以经过shader的变换处理在输出到我们的显示器中
&span style=&font-size:12&&void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)
if(nightVisionShader != null)
material.SetFloat(&_Contrast&, contrast);
material.SetFloat(&_Brightness&, brightness);
material.SetColor(&_NightVisionColor&, nightVisionColor);
material.SetFloat(&_RandomValue&, randomValue);
material.SetFloat(&_distortion&, distortion);
material.SetFloat(&_scale&,scale);
if(vignetteTexture)
material.SetTexture(&_VignetteTex&, vignetteTexture);
if(scanLineTexture)
material.SetTexture(&_ScanLineTileTex&, scanLineTexture);
material.SetFloat(&_ScanLineTileAmount&, scanLineTileAmount);
if(nightVisionNoise)
material.SetTexture(&_NoiseTex&, nightVisionNoise);
material.SetFloat(&_NoiseXSpeed&, noiseXSpeed);
material.SetFloat(&_NoiseYSpeed&, noiseYSpeed);
Graphics.Blit(sourceTexture, destTexture, material);
Graphics.Blit(sourceTexture, destTexture);
一切ok之后,在脚本调好各种值之后
让我们来看看效果
立马FPS了的感觉= =;
以下全部代码:
&span style=&font-size:12&&using UnityE
using System.C
public class night : MonoBehaviour
#region Variables
public Shader nightVisionS
public float contrast = 2.0f;
public float brightness = 1.0f;
public Color nightVisionColor = Color.
public Texture2D vignetteT
public Texture2D scanLineT
public float scanLineTileAmount = 4.0f;
public Texture2D nightVisionN
public float noiseXSpeed = 100.0f;
public float noiseYSpeed = 100.0f;
public float distortion = 0.2f;
public float scale = 0.8f;
private float randomValue = 0.0f;
private Material curM
#endregion
#region Properties
Material material
if(curMaterial == null)
curMaterial = new Material(nightVisionShader);
curMaterial.hideFlags = HideFlags.HideAndDontS
return curM
#endregion
void Start()
if(!SystemInfo.supportsImageEffects)
if(!nightVisionShader && !nightVisionShader.isSupported)
void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)
if(nightVisionShader != null)
material.SetFloat(&_Contrast&, contrast);
material.SetFloat(&_Brightness&, brightness);
material.SetColor(&_NightVisionColor&, nightVisionColor);
material.SetFloat(&_RandomValue&, randomValue);
material.SetFloat(&_distortion&, distortion);
material.SetFloat(&_scale&,scale);
if(vignetteTexture)
material.SetTexture(&_VignetteTex&, vignetteTexture);
if(scanLineTexture)
material.SetTexture(&_ScanLineTileTex&, scanLineTexture);
material.SetFloat(&_ScanLineTileAmount&, scanLineTileAmount);
if(nightVisionNoise)
material.SetTexture(&_NoiseTex&, nightVisionNoise);
material.SetFloat(&_NoiseXSpeed&, noiseXSpeed);
material.SetFloat(&_NoiseYSpeed&, noiseYSpeed);
Graphics.Blit(sourceTexture, destTexture, material);
Graphics.Blit(sourceTexture, destTexture);
void Update()
contrast = Mathf.Clamp(contrast, 0f,4f);
brightness = Mathf.Clamp(brightness, 0f, 2f);
randomValue = Random.Range(-1f,1f);
distortion = Mathf.Clamp(distortion, -1f,1f);
scale = Mathf.Clamp(scale, 0f, 3f);
void OnDisable()
if(curMaterial)
DestroyImmediate(curMaterial);
&span style=&font-size:12&&Shader &Custom/shaderTest& {
Properties {
_MainTex (&Base (RGB)&, 2D) = &white& {}
_Contrast(&Contrast&, Range(0, 4)) = 2
_Brightness (&Brightness&, Range(0, 2)) = 1
_NightVisionColor (&Night Vision Color&, Color) = (1, 1, 1, 1)
_RandomValue (&RandomValue&, Float) = 0
_distortion(&distortion&, Float) = 0.2
_scale(&scale&, Float) = 0.8
_VignetteTex(&Vignette Texture&, 2D) = &white& {}
_ScanLineTileTex(&Scan Line Tile Texture&, 2D) = &white& {}
_ScanLineTileAmount(&Scan Line Tile Amount&, Float) = 4.0
_NoiseTex(&Noise Texture&, 2D) = &white& {}
_NoiseXSpeed(&Noise X Speed&, Float) = 100.0
_NoiseYSpeed(&Noise Y Speed&, Float) = 100.0
SubShader {
Tags { &RenderType&=&Opaque& }
#pragma vertex vert_img
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest//使用这个标志可以fp16的对像素进行运算
#include &UnityCG.cginc&
uniform sampler2D _MainT
uniform sampler2D _ScanLineTileT//扫描线效果的贴图
//噪波贴图基于两种颜色或材质的交互创建曲面的随机扰动
//通过对两种颜色随机混合,生成噪波效果
uniform sampler2D _NoiseT//噪波贴图
uniform sampler2D _VignetteT//装饰图案,小插图,此处为晕影贴图
fixed _C//对比度
fixed _B//亮度
fixed _RandomV//随机值,用在噪波贴图随机uv扰动
fixed _//扭曲
fixed _//屏幕比例
fixed _ScanLineTileA//扫描线数量
fixed _NoiseXS//噪波x方向速度
fixed _NoiseYS//噪波y方向速度
fixed4 _NightVisionC//夜视镜颜色
struct Input {
float2 uv_MainT
float2 barrelDistortion(float2 coord)
float2 h = coord.xy - float2(0.5, 0.5);
float r2 = h.x * h.x + h.y * h.y;
float f = 1.0 + r2 * (_distortion * sqrt(r2));
return f * _scale * h + 0.5;
fixed4 frag(v2f_img i/*像素信息*/) : COLOR// 片元着色函数
half2 distortedUV = barrelDistortion(i.uv);
//桶形畸变uv
fixed4 renderTex = tex2D(_MainTex, distortedUV);
fixed4 vignetteTex = tex2D(_VignetteTex, distortedUV); //晕影贴图
//扫描线uv 可控扫描线数量
half2 scanLinesUV = half2(i.uv.x * _ScanLineTileAmount, i.uv.y * _ScanLineTileAmount);//_ScanLineTileAmount大小无限制
fixed4 scanLineTex = tex2D(_ScanLineTileTex, scanLinesUV);
//噪波贴图uv
half2 noiseUV = half2(i.uv.x + (_RandomValue * _SinTime.z * _NoiseXSpeed),i.uv.y + (_Time.x * _NoiseYSpeed));
fixed4 noiseTex = tex2D(_NoiseTex, noiseUV);
//lum = luminosity 亮度
fixed lum = dot (fixed3(0.299, 0.587, 0.114), renderTex.rgb);
lum += _B//加上可自控的亮度
//饱和度调为零,变成黑白效果,再与夜视镜颜色混合
fixed4 finalColor = (lum *2) + _NightVisionC//
finalColor = pow(finalColor, _Contrast);//对比度
finalColor *= vignetteT//与晕影贴图混合
finalColor *= scanLineTex * noiseT
return finalC
FallBack &Diffuse&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ------------- by wolf96
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:599022次
积分:8667
积分:8667
排名:第2359名
原创:201篇
转载:155篇
评论:178条
阅读:3318
阅读:14830
阅读:15891
文章:66篇
阅读:225389
(13)(10)(2)(1)(8)(6)(1)(1)(1)(4)(8)(5)(56)(18)(8)(13)(17)(26)(15)(7)(4)(11)(8)(17)(12)(6)(11)(14)(13)(19)(20)(9)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'unity3d ppsspp模拟器的post processing shader在unity中的使用 (2)_物联网在线/ Unity3DTest_2016
项目语言:None
Unity3DTest_2016/
18:34:19 +0800 (Mon, 09 May 2016)
(C)&&2013&&Alibaba&&Inc.&&All&&rights&&resvered.
Powered by今天看啥 热点:
【Unity Shaders】游戏性和画面特效——创建一个夜视效果的画面特效,unityshaders
本系列主要参考《Unity Shaders and Effects Cookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。这里是本书所有的插图。这里是本书所需的代码和资源(当然你也可以从官网下载)。========================================== 分割线&==========================================写在前面呜呼,这本书最后一篇了有木有!!!想想就有点小激动呢。。。(可是还有很多隔过去了。)技术文章里就不说太多废话了,之后会写一篇总结的,坑也会慢慢补上的(我希望吧。)。好啦!我们本节要学习的特效是一个更加常见的画面特效。在市场上很多的第一人称射击游戏(FPS)中,我们都可以看到夜视效果的身影,比如《使命召唤》、《光晕》等等。这种效果使屏幕蒙上一层非常独特的黄绿色。下面是《使命召唤》中的夜视效果:&为了实现这种夜视效果,我们需要使用Photoshop来分解上述效果的实现。我们可以从网上找一些参考图片,然后和已有图层合并,看看我们需要哪种混合效果,以及我们要怎样组合不同的图层。下面的图像显示了在Photoshop中进行上述过程的最后结果:而最后Shader实现的结果像下面这样:下面,我们开始将Photoshop中的最终图像分解成几个部分,来更好的理解这些资源是如何被整合在一起的。而后,我们会深入讲解实现过程。准备工作之前说过,使用Photoshop可以让我们方便地构分层图像,以便我们可以更好地理解如何得到一个夜视效果。现在,我们就把夜视效果分解成几个组成图层。偏绿色的画面(Tinted green):夜视效果的第一个图层就是它标志性的绿色,几乎所有的夜视图像都是这种色调的。这可以让我们的特效看起来就是明显的夜视效果。扫描线(Scan lines):为了增加夜视效果的真实性,我们在上述着色层的上面添加了一层扫描线。在这里,我们使用了一张用Photoshop创建的纹理,然后让用户选择平铺系数来控制扫描线的宽窄和大小。噪点(Noise):下一个图层是一个简单的噪点图层,它平铺在上述两种图层的上方,用于分解图像为我们的特效添加更多的细节效果。晕影(Vignette):夜视效果的最后一层就是晕影。从上面《使命召唤》的游戏截图可以看出,它使用一个晕影来模拟一个视野效果。我们使用下面的图层来作为晕影纹理。现在,我们把上述各个纹理结合在一起,开始正式创建夜视效果的画面特效。实现现在你的画面特效脚本系统应该已经建立好了,现在我们来实现具体的脚本和Shader。首先,我们来填写NightVisionEffect.cs脚本的主要代码。接下来,我们来实现关键的Shader部分。完整的脚本和Shader如下:NightVisionEffect脚本:using UnityE
using System.C
[ExecuteInEditMode]
public class NightVisionEffect : MonoBehaviour {
#region Variables
public Shader nightVisionS
public float contrast = 2.0f;
public float brightness = 1.0f;
public Color nightVisionColor = Color.
public Texture2D vignetteT
public Texture2D scanLineT
public float scanLineTileAmount = 4.0f;
public Texture2D nightVisionN
public float noiseXSpeed = 100.0f;
public float noiseYSpeed = 100.0f;
public float distortion = 0.2f;
public float scale = 0.8f;
private Material curM
private float randomValue = 0.0f;
#endregion
#region Properties
public Material material {
if (curMaterial == null) {
curMaterial = new Material(nightVisionShader);
curMaterial.hideFlags = HideFlags.HideAndDontS
return curM
#endregion
// Use this for initialization
void Start () {
if (SystemInfo.supportsImageEffects == false) {
if (nightVisionShader != null && nightVisionShader.isSupported == false) {
void OnRenderImage (RenderTexture sourceTexture, RenderTexture destTexture){
if (nightVisionShader != null) {
material.SetFloat(&_Contrast&, contrast);
material.SetFloat(&_Brightness&, brightness);
material.SetColor(&_NightVisionColor&, nightVisionColor);
material.SetFloat(&_RandomValue&, randomValue);
material.SetFloat(&_Distortion&, distortion);
material.SetFloat(&_Scale&, scale);
if (vignetteTexture) {
material.SetTexture(&_VignetteTex&, vignetteTexture);
if (scanLineTexture) {
material.SetTexture(&_ScanLineTex&, scanLineTexture);
material.SetFloat(&_ScanLineTileAmount&, scanLineTileAmount);
if (nightVisionNoise) {
material.SetTexture(&_NoiseTex&, nightVisionNoise);
material.SetFloat(&_NoiseXSpeed&, noiseXSpeed);
material.SetFloat(&_NoiseYSpeed&, noiseYSpeed);
Graphics.Blit(sourceTexture, destTexture, material);
Graphics.Blit(sourceTexture, destTexture);
// Update is called once per frame
void Update () {
contrast = Mathf.Clamp(contrast, 0.0f, 4.0f);
brightness = Mathf.Clamp(brightness, 0.0f, 2.0f);
distortion = Mathf.Clamp(distortion, -1.0f, 1.0f);
scale = Mathf.Clamp(scale, 0.0f, 3.0f);
randomValue = Random.Range(-1.0f, 1.0f);
void OnDisable () {
if (curMaterial != null) {
DestroyImmediate(curMaterial);
NightVisionEffectShader如下:Shader &Custom/NightVisionEffectShader& {
Properties {
_MainTex (&Base (RGB)&, 2D) = &white& {}
_VignetteTex (&Vignette Texture&, 2D) = &white& {}
_ScanLineTex (&Scan Line Texture&, 2D) = &white& {}
_ScanLineTileAmount (&Scale Line Tile Amount&, Float) = 4.0
_NoiseTex (&Noise Texture&, 2D) = &white& {}
_NoiseXSpeed (&Noise X Speed&, Float) = 100.0
_NoiseYSpeed (&Noise Y Speed&, Float) = 100.0
_NightVisionColor (&Night Vision Color&, Color) = (1, 1, 1, 1)
_Contrast (&Contrast&, Range(0, 4)) = 2
_Brightness (&Brightness&, Range(0, 2)) = 1
_RandomValue (&Random Value&, Float) = 0
_Distortion (&Distortion&, Float) = 0.2
_Scale (&Scale (Zoom)&, Float) = 0.8
SubShader {
#pragma vertex vert_img
#pragma fragment frag
#include &UnityCG.cginc&
uniform sampler2D _MainT
uniform sampler2D _VignetteT
uniform sampler2D _ScanLineT
fixed _ScanLineTileA
uniform sampler2D _NoiseT
fixed _NoiseXS
fixed _NoiseYS
fixed4 _NightVisionC
fixed _RandomV
float2 barrelDistortion(float2 coord) {
// Lens distortion algorithm
// See /content/lensalg.htm
float2 h = coord.xy - float2(0.5, 0.5);
float r2 = h.x * h.x + h.y * h.y;
float f = 1.0 + r2 * (_Distortion * sqrt(r2));
return f * _Scale * h + 0.5;
fixed4 frag(v2f_img i) : COLOR {
// Get the colors from the Render Texture and the uv's
// from the v2f_img struct
half2 distortedUV = barrelDistortion(i.uv);
fixed4 renderTex = tex2D(_MainTex, distortedUV);
fixed4 vignetteTex = tex2D(_VignetteTex, i.uv);
// Process
scan lines and noise
half2 scanLinesUV = half2(i.uv.x * _ScanLineTileAmount, i.uv.y * _ScanLineTileAmount);
fixed4 scanLineTex = tex2D(_ScanLineTex, scanLinesUV);
half2 noiseUV = half2(i.uv.x + (_RandomValue * _SinTime.z * _NoiseXSpeed),
i.uv.y + (_Time.x * _NoiseYSpeed));
fixed4 noiseTex = tex2D(_NoiseTex, noiseUV);
// Get the luminosity values from the render texture using the YIQ values
fixed lum = dot(fixed3(0.299, 0.587, 0.114), renderTex.rgb);
fixed4 finalColor = (lum * 2) + _NightVisionC
// Final output
finalColor = pow(finalColor, _Contrast);
finalColor *= vignetteT
finalColor *= scanLineTex * noiseT
return finalC
FallBack &Diffuse&
完成后返回Unity编辑器查看效果。我们需要在面板中设置对应的图片和属性,像下面这样:扩展链接关于透镜形变效果:/content/lensalg.html
  你好!以下为答案~(关于职业嘛 本人觉得主要是对BC和C语言资深的人士...)  一、游戏程序开发的工作主要包括哪些方面  游戏开发中的程序开发主要由如下几个方面组成:  1.图形引擎  2.声音引擎  3.物理引擎  4.游戏引擎  5.人工智能或游戏逻辑  6.游戏GUI界面(菜单)  7.游戏开发工具  8.支持局域网对战的网络引擎开发  9.支持互联网对战的网络引擎开发  下面逐一介绍每个部分:  1.图形引擎主要包含游戏中的场景(室内或室外)管理与渲染,角色的动作管理绘制,特效管理与渲染(粒子系统,自然模拟(如水纹,植物等模拟)),光照和材质处理,LOD(Level Object Detail)管理等,另外还有图形数据转换工具开发,这些工具主要用于把美工用DCC软件(如3DS Max,Maya,Soft XSI,Soft Image3D等)软件制作的模型和动作数据以及用Photo shop或painter等工具制作的贴图,转化成游戏程序中用的资源文件。  2.声音引擎主要包含音效(Sound Effect简称SE),语音(VOICE),背景音乐(Background music简称BGM)的播放。SE是指那些在游戏中频繁播放,而且播放时间比较短,但要求能及时无延迟的播放,VOICE是指游戏中的语音或人声,这部分对声音品质要求比较高,基本上用比较高的采样率录制和回放声音,但和SE一样要求能及时无延迟的播放,SE在有的时候因为内存容量的问题,在不影响效果的前提下,可能会降低采样率,但VOICE由于降低采样率对效果影响比较大,所以一般VOICE不采用降低采样率的做法。BGM是指游戏中一长段循环播放(也有不循环,只播放一次)的背景音乐,正是由于BGM的这种特性,一般游戏的背景音乐是读盘(光盘或硬盘)来播放。另外一些高级声音特效,如EAX,数字影院系统(DTS5.1),数字杜比环绕等。  3.物理引擎主要包含游戏世界中的物体之间、物体和场景之间发生碰撞后的力学模拟, 以及发生碰撞后的物体骨骼运动的力学模拟(比较著名的物理引擎有havok公司的game dynamics sdk,还有open source 的ODE—Open Dynamics Engine)。  4.游戏引擎主要是把图形引擎、声音引擎、物理引擎整合起来,主要针对某个游戏制作一个游戏系统,其包含游戏关卡编辑器,主要用途是可以可视化的对场景进行调整,光照效果和雾化等效果调整,事件设置,道具摆放,NPC设置,另外还有角色编辑器,主要用于编辑角色的属性和检查动作数据的正确性。一般日本游戏公司的做法,他们会把关卡编辑器和角色编辑器直接做到游戏中,所有的参数调整都在游戏中通过调试菜单来进行编辑,所以一般他们把这部分调试菜单的功能做的很强大,同时在屏幕上实时的显示一些重要的信息,这样做的好处是关卡编辑器调整的效果直接就是游戏的效果,但是对于程序的重用性来说可能不是很好,比如说要用到另外一个游戏项目中就比较难,除非两个游戏类型相同,只要把场景和角色数据换一下,还有做下一代产品也没有问题,只要根据式样增加调试菜单的功能就可以了。  5.人工智能和游戏逻辑开发,这部分日本和欧美的游戏开发模式也有很大不同,在欧美游戏公司中运用脚本语言开发很普遍,所以这部分程序开发主要是用脚本语言编写,而且脚本程序和游戏程序的耦合性很低,有单独的编辑、编译和调试环境,这样比较利于游戏程序和关卡设计开发分开,同时并行开发,所以一般他们都会有专门做关卡设计的程序员岗位。而日......余下全文>>
暂无相关文章
相关搜索:
相关阅读:
相关频道:
Android教程最近更新}

我要回帖

更多关于 unity 调用android 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信