晟合建设集团网站课程网站建设总体情况
晟合建设集团网站,课程网站建设总体情况,两个网站开发swot分析,网站备案目的特效是游戏制作不可或缺的一环#xff0c;作为游戏开发者最重要的工作就是将特效添加到游戏中#xff0c;并在合适的时机、合适的位置将特效播放出来#xff0c;同时还要注意特效的管理和销毁。
某些种类的特效#xff0c;如动效、贴花#xff0c;还要编写脚本代码以实现…特效是游戏制作不可或缺的一环作为游戏开发者最重要的工作就是将特效添加到游戏中并在合适的时机、合适的位置将特效播放出来同时还要注意特效的管理和销毁。
某些种类的特效如动效、贴花还要编写脚本代码以实现更细节的控制。因此本文将简单介绍各种特效的使用方法。 特效和动画的播放本身没有什么难点很多时候只需要实例化物体即可。
1.创建粒子特效
在Asset Store中有一套适合学习和使用的免费粒子资源名为Unity Particle Pack。这套素材在导入后可能会提示重启Unity按照提示操作即可。以下借用这套素材进行说明。
在导入资源包后找到粒子素材的prefab例如EarthShatter。将其拖入场景即可立即预览效果。在选中特效物体时还会在场景中出现一个小的工具窗口可以方便地暂停、播放和重放粒子而且还可以调整预览速度等。
查看这个资源文件发现其扩展名为“.prefab”选中后也可以看出它确实只是一个普通的prefab文件。这个物体上挂载了Particle System粒子组件而且具有5个子物体每个子物体也分别挂载了粒子组件。通过分别禁用每一个子物体可以看到每个子物体的作用。例如Rock Spike是生成的岩石的主体Fire Embers是飞散的火花Fire Ball是沿路径运动的火球等。如果分析了更多的粒子特效会发现特效设计师往往是通过多个小特效的叠加来实现华丽而复杂的特效的。
从使用特效的角度来看由于特效素材只是一个prefab因此唯一要做的只是将它实例化出来而已与创建任何一个物体没有区别。
创建一个空物体并挂载以下代码运行游戏时按空格键就可以播放粒子了
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CreatParticle : MonoBehaviour
{public GameObject prefabParticle;void Update(){if(Input.GetButtonDown(Jump)){GameObject particle Instantiate(prefabParticle);}}
}2.粒子特效的生命周期
物体的生命周期主要是指物体从创建到销毁的过程。作为技术开发人员可以不关心资源的制作但一定要关心资源生命周期的管理。
粒子组件具有一定的播放时间而且加入了与生命周期有关的选项用于设置播放完成后的循环播放、停止播放或销毁自身。这些选项大体都在粒子组件的第一个编辑栏中。
粒子组件的绝大部分选项都影响着粒子的播放效果由特效设计师负责而某些选项则与粒子生命周期有关需要技术开发者负责。 Duration粒子播放的总时间Looping是否循环。该选项用于某些持续性特效如篝火Play On Awake创建时立即播放。如果没有勾选此项在脚本创建子物体后需要调用Play函数Stop Action粒子播放完成后的行为Ring Buffer Mode是否启用环形缓冲区。环形缓冲区是一种类似对象池的程序优化技术可以实现资源回收复用极大减小创建和销毁资源的开销。这一选项与Max Particles最大粒子数量相关是对当前粒子物体中大量粒子的优化 如果粒子创建后不自动播放则用脚本播放的代码如下
GameObject particle Instantiate(prefabParticle);
//如果粒子没有勾选Play On Awake选项就需要手动调用Play
ParticleSystem ps particle.GetComponentParticleSystem();
ps.play();
粒子选项中的Stop Action有以下几种选择 None什么都不做Disable将当前物体禁用。如果稍后还要再播放可以让粒子先自动禁用Destroy摧毁当前物体。这是最简便易行的销毁粒子方法不用写脚本。Callback调用脚本方法让脚本进行下一步处理。需要在粒子组件的物体上挂载脚本其中粒子的回调方法如下 public void OnParticle SystemStopped() {
Debug.Log(粒子停止)
} 一般来说如果粒子播放一遍以后就没用了最常见的办法应该是将Stop Action选项设置为Destroy自动销毁物体。如果有其它特殊需求就有多种销毁的思路。利润也可以让脚本定时执行销毁时间为Duration也可以选择Callback让粒子播放完成后通知脚本在脚本的OnParticleSystemStopped方法中进一步处理。
3.创建动画特效
只需要用脚本把对应物体创建出来即可略
4.定时销毁动画或动效
让动画或动效都能在一定时间后销毁可以用组件化思路设计一个通用化的脚本事先制指定销毁时间给所有创建的粒子或动画都挂载上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TimeDestroy : MonoBehaviour
{public float time 1;void Start(){invoke(Destroy, time);}void Destroy(){Destroy(gameObject);}}上述的代码用了Invoke方法延时调用也可以用协程实现。这种思路非常通用可以用在游戏中的粒子、子弹等各种物体上。
当然对于动画还可以用“动画帧事件”的方法。在动画最后一帧加上一个帧事件调用脚本来销毁动画但编辑大量动画会比较繁琐。
5.调整动画和粒子参数 大部分情况下不需要调整动画和粒子的参数直接播放即可。有时会有一些特殊要求如动画加减速播放、粒子改变整体时间等实际的例子如下
GameObject particle Instantiate(prefabParticle);
//如果粒子没有勾选Play On Awake选项就需要手动调用Play
ParticleSystem ps particle.GetComponentParticleSystem();
//注意不要再播放后修改参数不支持
//因此测试本脚本必须取消勾选粒子的Play On Awake选项//获取主参数即粒子组件界面上的第一组参数
ParticleSystem.MainMoudle main ps.main;
main.duartion 1; //改变总持续时间
main.startSpeed 40; //改变初始速度
main.stopAction ParticleSystemStopAction.Destroy; //改变播放一次后的行为//同理获取发射参数
ParticleSystem.EmissionModule emission ps.emission;
emission.rateOverTime 1000; //加大发射频率ps.Play();
如上述代码所示粒子的绝大部分参数都可以通过脚本修改。由于相关函数有改动因此很多开发者遇到了编译错误。
以上代码中必须把每个参数组先赋值给一个临时变量如main或emission然后再修改变量。然而不能用一行表达式直接修改参数大致是因为MainModule和Emmision等类型都是结构体而粒子系统用了特殊语法实现结构体数据和粒子组件的绑定导致出现这种很少见的语法现象。
修改动画播放速度也是常见的需求示例代码如下
//创建动画prefab
GameObejct obj Instantiate(prefab);
//给都规划加上定时销毁脚本并定时1秒
obj.AddComponentTimeDestroy.time 1;//修改动画播放速度为2倍速
Animator anim obj.GetComponentAnimator();
anim.speed 2;
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88344.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!