2014-10-21 23:38:28 book_longssl 阅读数 22300
• ###### Unity 3D残影技术实现

主要实现了3D游戏中残影效果，非常适合游戏开发。

11295 人正在学习 去看看 姜雪伟

var speed = 3.0; //This data type is a float.
var jumpSpeed = 50.0;
var grounded = true;

function Update ()
{
var x : Vector3 = Input.GetAxis("Horizontal") * transform.right * Time.deltaTime * speed;
var z : Vector3 = Input.GetAxis("Vertical") * transform.forward * Time.deltaTime * speed;

//transform.Translate(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

transform.Translate(x + z);
transform.rotation = Quaternion.LookRotation(Vector3.forward, Vector3.up);

if(Input.GetButtonDown("Jump"))
{
Jump ();
}
}

function Jump ()
{
if(grounded == true)
{
grounded = false;
}
}

function OnCollisionEnter(hit : Collision)
{
grounded = true;
Debug.Log("I'm colliding with something!");
}

1
transform.rotation = Quaternion.LookRotation(Vector3.forward, Vector3.up);

var speed : float = 6.0;
var jumpSpeed : float = 8.0;
var gravity : float = 20.0;

private var moveDirection : Vector3 = Vector3.zero;

function Update()
{
var controller : CharacterController = GetComponent(CharacterController);

if(controller.isGrounded)
{
moveDirection = Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); //Allows for player input
moveDirection = transform.TransformDirection(moveDirection); //How to move
moveDirection *= speed; //How fast to move

if(Input.GetButton("Jump"))
{
moveDirection.y = jumpSpeed;
}
}
//Apply gravity
moveDirection.y -= gravity * Time.deltaTime;

//Move the controller
controller.Move(moveDirection * Time.deltaTime);

}

function Update()
{
if(Input.GetKey("d") || Input.GetKey("right"))
{
animation.Play("RunFwd");
}
else if(Input.GetKey("a") || Input.GetKey("left"))
{
animation.Play("RunBkwd");
}
else if(Input.GetKey("w") || Input.GetKey("up"))
{
animation.Play("StrafeL");
}
else if(Input.GetKey("s") || Input.GetKey("down"))
{
animation.Play("StrafeR");
}
else
{
}
}

unity3d 效果 相关内容

2013-01-15 12:09:04 jeksonal 阅读数 6285
• ###### Unity 3D残影技术实现

主要实现了3D游戏中残影效果，非常适合游戏开发。

11295 人正在学习 去看看 姜雪伟

1： 对场景主摄像机的设置中      Rendering Path 需设置为：Deferred Lighting

unity3d 效果 相关内容

2019-07-24 22:51:53 leeby100 阅读数 7107
• ###### Unity 3D残影技术实现

主要实现了3D游戏中残影效果，非常适合游戏开发。

11295 人正在学习 去看看 姜雪伟

● Unity日景烘焙

1. 模型导出

2. 模型导入Unity

⑴ 在导入模型前，按下图所示，勾选掉Unity3d的“Auto Generate”（自动烘焙）选项，好多人一打开Unity3d，不知道怎么啦，总感觉系统处于运算状态，就是因为Unity默认这个选项是勾选的，当导入模型后，什么还没做，就一直陷入莫名的忙机，也是这个原因，所以导入前取消这个选项。

⑵ 按下图所示将刚才从3d软件导出的FBX模型拖入Unity3d的Assets文件夹，2017版之后，可能出于别的考虑，Unity不再直接导入材质和贴图，所以很多人发现模型导入后总是无材质和贴图的裸模，这里还需要做一点设置，看下一步。

⑶ 选中刚导入的FBX模型，点击inspector面板的Materails按钮，我们发现下面的所有材质都显示“none”,这就是裸模的根源，有童鞋说，前面不是说导出FBX时不勾选“Embedmedia”选项，就会出现裸模，这都勾选了，怎么还是裸模呢？这里需要说一下，如果前面不勾选，这里一定是裸模，但是，勾选之后，还需要一点点设置，否则依然会裸模，也就是前面和现在的设置缺一不可。

⑷ 继续，此时拉开“location”后面的下拉框，将设置改为第一项，也就是“use external materails（legacy）”，意思是使用外部材质，如下图所示：

⑸ 接下来还需要将“naming”后面的下拉框改为“from model‘s materails’”，如下图所示，意思是贴图名称取自模型材质，然后点击下面第二张图中所示的“apply”（应用）按钮，这时unity就稀里哗啦地将所有材质和贴图真正导入Unity。

⑹ 导入材质和贴图后，unity的assets文件夹中会多出“materails”和与FBX同名的后缀为".fbm"的两个文件夹，一个存放的是材质，一个用来存放贴图，如下图所示。

⑺ 接下来将assets中的FBX模型拖入“Herarcy（层级面板）”，此时我们可以看到，FBX模型连同材质和贴图被完美地导入了Unity，如下图所示。

3. Unity3d场景布光及光照参数设置

⑴ 下面我们用平行光来模拟太阳光，作为主光源（照亮场景的主要光源）照亮场景的部分区域（也就是迎光面），产生光斑，与此同时，在其他区域产生阴影。照亮区和阴影区必须形成强烈的反差，才能显示出阳光的明媚，很多人烘焙的场景平淡，就是因为明暗对比不强烈，该亮的不亮，该暗的不暗。非洲人之所以看起来牙齿很白，是因为黑色脸部的衬托所致，因此要表现优秀的阳光效果，光照明暗反差要大，但暗区也不能死黑一片。Unity一创建新的场景，就默认为我们创建了一盏平行光，现在我们将其调至如下图所示的投射角度，既要考虑让一二层都有阳光投射的痕迹，又不至于灯光垂直入射。

⑵ 接下来选中平行光（Directional Light），将inspector面板中的灯光强度（intensity）调至2，如下图所示，默认值是1，很多人马上说灯光已经曝光了，但必须调大，因为我们最终要的是烘焙光照，不是实时光照，现在只是实时光照曝光了，因为烘焙光照的算法和实时光照不同，不调大，烘焙后阳光不够强烈。另外，顺便将灯光的模式“Mode”改为“baked（烘焙模式）”，如下面第二张图所示。其他值

⑶ 主光源设定之后，我们还需要考虑阴影区域的照亮，虽然阴暗区相对照亮区较暗，但也不能有伸手不见五指的感觉，正午阳光充足的时候，在强光的照射对比下，阴影区会显得比较暗，但物体还是能看清，而且有层次感的，这主要是天光的贡献，因此我们需要开启Unity的天光作为辅助光源来照亮阴暗区域，与此同时，主光源照射到迎光面后，反射到周围的物体上，这些物体又作为二次光源照亮其他物体，多次反弹后到达阴暗区，也起到光照的作用，因此，这个场景的辅助光源除了天光，还有主光源-太阳光多次反弹光，或者说两者的综合效果作为辅助光，共同照亮阴影区。现在我们打开光照面板，点击window/lingting/settings,如下图所示，弹出光照面板，然后按下面第二张图所示，将光照面板的标签拖至inspector面板标签之后，使其和inspector面板并排，这样节省屏幕空间，如下面第三张图所示。

⑶ 接下来将光照面板（Lighting）下场景（Scene）标签中的环境反射（Environment Reflections）的反弹次数改为5，这个值越大，光线会充分传递到阴暗区，亮度越亮，但亮度不会超过照亮区。然后将实时光照（RealTime Lighting）下实时全局光照（RealTime Global ILLumination）后的复选框取消勾选，也就只进行烘焙全局光照计算。接着将混合光照（Mixed Lighting）的光照模式（Lighting Mode）后的下拉框中的选项改为烘焙间接光（Baked Indirect），最后再将光照贴图设置（Lightmapping Setings）下的光照运算器（Lightmaper）后的下拉框选项改为渐进式（Progressive），如下图所示。还需要勾选环境遮蔽(Ambient Occlusion)，也就是AO，如下第二张图所示，这个选项会在物体或物体间内转角或内转折处产生软阴影，例如墙内凹角，对于表现细节很有帮助。至此场景的辅助光和光照参数就设好了。

4. 烘焙模型设置

5. 烘焙

6. 没经验的初学者烘焙的情况

7. 烘焙渲染超级缓慢的原因分析及解决方案

⑴ 模型面数超高是Unity3d烘焙超慢的罪魁祸首

⑵ 模型交叉也是导致烘焙渲染超级缓慢不容忽视的因素

⑶ 面重叠（Overlapped faces）也是导致烘焙渲染缓慢的重要因素

⑷ 不合理的lightmap UV布局将大幅增加烘焙渲染时间

8. 影响烘焙渲染质量的因素分析及解决方案

⑴ 模型面数超高是影响烘焙质量的重要因素

⑵ 面重叠也是影响烘焙质量不可忽视的因素

⑶ lightmap UV布局也是影响Unity3d烘焙质量最重要的因素

9. 分步/分批次烘焙渲染

10. 烘焙渲染分类

⑴ 静态灯光下静态物体的烘焙

⑵ 静态灯光下动态物体的烘焙

Unity静态灯光下动态物体的烘焙设置步骤如下四图所示：

⑶ 动态灯光下静态物体的烘焙

⑷ 动态灯光下动态物体的烘焙

⑸ 四种烘焙方式的比较

● Unity夜景烘焙

1. 灯光布设

2. 烘焙设置

3. 夜景烘焙

8个点光源共同作为主光源点亮了整个场景，各自产生了限定在一定范围包内的柔和阴影，但是作为主景的狮头雕还不够突出，所以考虑在狮头的上方布设两盏模拟射灯的点光源，同时在狮头前方的地面上也布设一盏模拟射灯的点光源，三盏点光源共同作为场景的辅助光源一起点亮狮头，但不宜过亮。具体设置如下图所示：

● Unity混合烘焙

The most flexible way to use the lighting system is to use Baked GI and Realtime GI together. However, this is also the most performance-heavy option. To make your game less resource-intensive, you can choose to disable Realtime GI or Baked GI.

● Unity室内烘焙

● Unity沙漠庭院烘焙

Unwrap uvw面板的贴图通道（Map Channel）用来设置拆分的UV坐标保存在哪个通道，通道可以有8个。材质面板中的贴图通道（Map Channel）用来设置这个材质贴图的排列受哪个UV坐标的贴图通道控制，系统默认固有色（或过度色）贴图受通道1（即Map channel 1）控制，展UV（Unwrap uvw）修改器面板的贴图通道（Map Channel）默认是2，因为一般情况下都是用UVW Map调整贴图坐标，这个UV坐标占据通道1，有的童鞋使用展平修改器时，发现模型的贴图没有变化，是因为展平修改器的贴图通道和材质的贴图通道不一致，模型的贴图没有受到你正在使用的材质贴图展平UV的控制，如下图所示：

UV展平后有两种用途，一种用于美工在photoshop中绘制贴图，另一种用于控制纹理贴图，没有美术功底的童鞋，当然不会绘制贴图啦，那就用展平的UV坐标来控制纹理贴图好了。

UV正确拆分后，不需要太高分辨率的贴图就可以让模型的贴图很清晰，贴图分辨率太高，烘焙和实时运行时机器负载太大。

● 社区室外日景烘焙

● 社区室外夜景烘焙

● 游戏场景烘焙

1. 模型阶段造成U3d光影烘焙问题和实时运行卡顿的因素探讨及消除方法

3d场景和Unity3d场景中的卡顿除了模型面数太高所致，材质、贴图的数量太多和贴图分辨率太大也是造成卡机的重要因素。对于需要重复贴图的材质，如果纹理相差不大，尽量使用同一材质，同时尽可能使用分辨率较小（如128x128）的高清晰度无缝贴图，有的童鞋在使用重复贴图时，往往不注意无缝贴图的分辨率，找来就用，例如常用一张4096X4096、2048X2048或1024X1024作为重复贴图用于材质，然后通过调整UV让纹理缩小，结果和128x128的纹理效果完全一样，但是大尺寸和小尺寸的贴图所消耗的机器资源相差非常大，所以小姐姐强烈建议使用小尺寸（也就是小分辨率，如128x128）的无缝纹理作为重复贴图，这样可以从重复贴图的角度消除卡顿。而对于无需重复贴图的材质，例如广告牌、指示牌、护栏和围墙及铁艺、百叶窗的镂空贴图，小姐姐建议这些模型使用同一种材质，并将所有纹理合并到一张贴图中，如下图所示，这样就可以使多个使用不同非重复纹理的物体或者物体的面使用同一种材质，不仅减少了材质的数量，也减少了贴图的数量，更重要的是在unity3d作品启动时会更快，因为这些物体只需要加载一张贴图，如果不这样，而是每个物体使用各自独立的贴图，加载会非常慢，这时有童鞋会问，不同物体使用同一种材质，而且每个物体贴图也不一样，这怎么弄呢，这就需要使用手工拆分UV1（材质贴图默认占据一号UV通道），也就是手工展平UV1，即将物体的UV手工调整到这张贴图中这个物体需要的对应贴图区域。这样就可以进一步消除因为重复纹理太大、非重复纹理数量太多和材质数量太多所造成的卡顿，当然这部分是在单面建模过程中需要做的。

2. Unity3d场景的视锥剔除、遮挡剔除、和LOD优化及模型阶段的预处理

⑴ Unity3d的视锥剔除

Unity的视锥剔除优化除了要求在3d软件中不能合并那些零碎多面的模型外，有时也得把一些多面的其他poly网格模型切分（Detach）或拆解成多个网格模型。另外，Unity3d有个硬性要求，即每个mesh（网格模型，也就是我们前面所说的poly网格模型，即一个物体）的最大顶点数（Vertices count）不能超过65556，有的童鞋不管三七二十一，将整个场景合并成了一个物体，或者将多个物体合并在了一起，导入Unity3d时报错，就是因为导入的模型中，有顶点数超过这个数值的模型，而有的童鞋说，它的模型顶点数比这个数值小很多，导入时还是报错，这是因为Unity导入时会对模型进行些微的重构，此时Unity会自动添加一些顶点，当顶点数超过了上限值时会报错。这个上限值可以作为模型拆解的参考，对于不连续（也就是分离）的mesh，直接拆解就可以了，对于连续（也就是无缝固连在一起）的mesh，拆解时尽量将切缝选在比较隐蔽的转角处，以免烘焙之后出现接缝。

⑵ 针对视锥剔除的模型预处理

⑶ Unity3d的遮挡剔除

⑷ 针对遮挡剔除的模型预处理

⑸ LOD优化

Detail细节等级）优化，为了让大家理解LOD优化，小姐姐举个生活中大家熟知的例子，相信大家一定有送亲友离别的经验，当亲友在你身边即将离开时，他的面部表情、神态、肢体、着装都可以看得很清楚，当亲友离开一定距离时，只能看到他的头发和衣服颜色，表情、神态和着装细节已经看不清了，再远一些，只能看到他的肢体轮廓，更远一些，他的形体集聚成一个小黑人，最后消失在视野中。我们来分析一下这个过程，无论亲友离你多远，他的面部形态、肢体形态、着装及他的身高等都是不变的，只是随着距离变化，一些细节视觉已经无法分辨了而已。如果用一个3d角色（模型）来表现，反正远处也看不清细节，不如将模型简化一些，贴图缩小一些，这样既不影响视觉效果，还能减轻机器负担。LOD就是利用这样的思路，来优化（加速渲染计算）视锥中经视锥剔除和遮挡剔除优化后剩余的物体，具体地说就是根据物体与相机之间距离的增大，让物体及贴图使用不同的简化版本。下面的GIF用一个球体简单地展示了LOD的优化原理，近处用面数比较多的球体，稍远一点，用一个面数比较少的近似球体，更远处用一个面数更少的几何体，再远就直接剔除掉。我们把距相机不同距离范围所对应的模型及贴图称为细节等级，LOD一般可有3-5个细节等级，分别为LOD0、LOD1…LOD4，默认为3级，即LOD0、LOD1…LOD2，LOD0为最高级，即模型面数最多、贴图分辨率最高，LOD2或LOD4级别最低，即模型面数最少、贴图分辨率最低。

⑹ 针对LOD优化的模型预处理

⑺ Unity3d LOD优化的组件设置

LOD可用于所有需要LOD优化的模型，但一般主要用于数目较多的植物、石头之类的高面模型， 下面的GIF动画展示了speedtree树木在Unity3d中的LOD优化，我们截取其中一帧进行图解，见下面第二张图所示。

LOD优化正是利用物体与相机的距离增大时视觉逐渐模糊和距离减小时视觉逐渐清晰的现象，让处于不同相机距离范围的不同物体使用不同的细节等级，并动态地升高或降低细节等级、剔除、解除剔除，这种模型面数和贴图大小的动态布局，使相机的渲染计算量大幅减小。如果不理解，我们可以用反向思维来推理，也就如果不使用LOD优化，那么无论物体距离相机多远，视锥内的高面物体的面数都保持不变，也没有物体被剔除，此时视锥内物体的总面数远远大于使用LOD优化后的值，视锥内所有物体的贴图所消耗的显存也远远大于使用LOD优化后的值，运行时要比LOD优化后卡顿，LOD优化的优势由此可见一斑。

3. 光照贴图UV坐标（UV2）拆分

OK，下面就来拆分，首先选择三个山体，然后将其群组，并命名为“shanti_4096”，然后选择这个群组并展平UV2，因为这三个山体比较大，所以设置其UV2的分辨率大一些，这里设为4096x4096，如下图所示，然后隐藏这个群组，以免忘记哪些已经拆分，哪些没拆分。

4. 将模型从建模软件导出

5. 游戏场景的搭建

6. 材质调整

7. 游戏场景光照烘焙及后处理

⑴. 室外日景光照烘焙和后处理

①. 灯光设置

②. 光照设置

③. 光影烘焙

④. 植被绘制

④. 植被的烘焙

⑤. 后处理

⑥. 场景优化

# 欢迎使用Markdown编辑器

## 新的改变

1. 全新的界面设计 ，将会带来全新的写作体验；
2. 在创作中心设置你喜爱的代码高亮样式，Markdown 将代码片显示选择的高亮样式 进行展示；
3. 增加了 图片拖拽 功能，你可以将本地的图片直接拖拽到编辑区域直接展示；
4. 全新的 KaTeX数学公式 语法；
5. 增加了支持甘特图的mermaid语法1 功能；
6. 增加了 多屏幕编辑 Markdown文章功能；
7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能，功能按钮位于编辑区域与预览区域中间；
8. 增加了 检查列表 功能。

H2O is是液体。

210 运算结果是 1024.

## 如何插入一段漂亮的代码片

// An highlighted block
var foo = 'bar';


• 项目
• 项目
• 项目
1. 项目1
2. 项目2
3. 项目3
• 计划任务
• 完成任务

## 创建一个表格

### SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如：

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

## 创建一个自定义列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

## 注释也是必不可少的

Markdown将文本转换为 HTML

## KaTeX数学公式

Gamma公式展示 $\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N$ 是通过欧拉积分

$\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.$

## 新的甘特图功能，丰富你的文章

• 关于 甘特图 语法，参考 这儿,

## UML 图表

• 关于 Mermaid 语法，参考 这儿,

## FLowchart流程图

• 关于 Flowchart流程图 语法，参考 这儿.

## 导出与导入

### 导入

1. 注脚的解释 ↩︎

unity3d 效果 相关内容

2017-06-30 16:32:08 q54402145 阅读数 2760
• ###### Unity 3D残影技术实现

主要实现了3D游戏中残影效果，非常适合游戏开发。

11295 人正在学习 去看看 姜雪伟

unity3d 效果 相关内容

2016-06-05 16:19:35 datealive 阅读数 4971
• ###### Unity 3D残影技术实现

主要实现了3D游戏中残影效果，非常适合游戏开发。

11295 人正在学习 去看看 姜雪伟

## Unity3D实现粒子光环效果

1. 使用unity3d自带的粒子系统
2. 为圆环设置最大半径maxR和最小半径minR
3. 使用x=R*sin(angle), y=R*cos(angle)来计算每个粒子的坐标
4. 将粒子数组设置到选定的粒子系统中

public class Point {
public float angle;

private float x = 0.0f;
private float y = 0.0f;

public void Cal() {
float temp = angle / 180.0f * Mathf.PI;
}
public Point(float angle, float radius) {
this.angle = angle;
}

public float getX() {
return x;
}

public float getY() {
return y;
}
}

    private ParticleSystem particleSystem;
//粒子数组
private ParticleSystem.Particle[] particleArray;
//粒子坐标集合
private Point[] points;

//颜色梯度
//控制透明度的变化
//控制颜色的变化

//粒子参数
public int count = 1000;
public float size = 0.5f;
//控制主方向是顺时针还是逆时针
public bool clockwise = true;
public float speed = 0.5f;

private void Init() {
int i;
for (i = 0; i < count; i++) {
float angle = Random.Range(0.0f, 360.0f);
points[i].Cal();
particleArray[i].position = new Vector3(points[i].getX(), points[i].getY(), 0f);
}

particleSystem.SetParticles(particleArray, particleArray.Length);
}

// Update is called once per frame
void Update () {
int i;
int level = 7; //将整个粒子系统分成七层，每一层的旋转方向和速度都有差异
for (i = 0; i < count; i++) {

if (i % level > 3)
{
//外层顺时针旋转
points[i].angle -= (i % level + 1) * speed;
} else {
//内层逆时针旋转
points[i].angle += (i % level + 1) * speed;
}

points[i].angle = (points[i].angle + 360.0f) % 360.0f;
//粒子旋转半径的微小变化，能够让粒子运动体现出随机性
points[i].radius += 0.04f * (Mathf.PerlinNoise(points[i].angle/360.0f, 0.0f))-0.02f;
points[i].Cal();
particleArray[i].position = new Vector3(points[i].getX(), points[i].getY(), 0.0f);
}
particleSystem.SetParticles(particleArray, particleArray.Length);
}

using UnityEngine;
using System.Collections;

public class Point {
public float angle;

private float x = 0.0f;
private float y = 0.0f;

public void Cal() {
float temp = angle / 180.0f * Mathf.PI;
}
public Point(float angle, float radius) {
this.angle = angle;
}

public float getX() {
return x;
}

public float getY() {
return y;
}
}
public class PCircle : MonoBehaviour {

private ParticleSystem particleSystem;
//粒子数组
private ParticleSystem.Particle[] particleArray;
//粒子坐标集合
private Point[] points;

//颜色梯度
//控制透明度的变化
//控制颜色的变化

//粒子参数
public int count = 1000;
public float size = 0.5f;
//控制主方向是顺时针还是逆时针
public bool clockwise = true;
public float speed = 0.5f;

private void Init() {
int i;
for (i = 0; i < count; i++) {
float angle = Random.Range(0.0f, 360.0f);
points[i].Cal();
particleArray[i].position = new Vector3(points[i].getX(), points[i].getY(), 0f);
}

particleSystem.SetParticles(particleArray, particleArray.Length);
}
// Use this for initialization
void Start () {
particleSystem = this.GetComponent<ParticleSystem>();
particleArray = new ParticleSystem.Particle[count];
points = new Point[count];
particleSystem.startSpeed = 0;
particleSystem.startSize = size;
particleSystem.maxParticles = count;
particleSystem.Emit(count);
particleSystem.GetParticles(particleArray);

float delt = 0f;
//设置梯度变化有五个程度，且是均匀变化
for (int i = 0; i < 5; i++) {
delt += 0.2f;
}

Init();
}

// Update is called once per frame
void Update () {
int i;
int level = 7; //将整个粒子系统分成七层，每一层的旋转方向和速度都有差异
for (i = 0; i < count; i++) {

if (i % level > 3)
{
//外层顺时针旋转
points[i].angle -= (i % level + 1) * speed;
} else {
//内层逆时针旋转
points[i].angle += (i % level + 1) * speed;
}

points[i].angle = (points[i].angle + 360.0f) % 360.0f;
//粒子旋转半径的微小变化，能够让粒子运动体现出随机性
points[i].radius += 0.04f * (Mathf.PerlinNoise(points[i].angle/360.0f, 0.0f))-0.02f;
points[i].Cal();
particleArray[i].position = new Vector3(points[i].getX(), points[i].getY(), 0.0f);
}
particleSystem.SetParticles(particleArray, particleArray.Length);
}
}


unity3d 效果 相关内容