|
本帖最后由 暗暗十分 于 2020-4-18 04:54 编辑
我已经尝试过能在大部分的GameEntity上附加粒子效果了
- ParticleSystem particle = ParticleSystem.CreateParticleSystemAttachedToEntity("psys_game_burning_agent", missile.Entity, ref localFrame);
复制代码
这行代码的效果是在飞行物(箭矢)上附加一个燃烧的粒子效果,从而实现火焰箭。
我知道现在通过修改物品的xml文件就能简单实现火焰箭,但是那个实现是有局限的,只有视觉效果,而且还不能保留箭矢,射中就消失,而如果取消到射中即消失的burning="true"的flag,箭矢虽然会留下,但是燃烧粒子也会一直存在,箭多了之后会占用极大的显存,造成卡顿
而通过代码产生粒子效果来实现的话,就能对粒子进行控制,从而实现射中后箭矢存留且火焰消失,还能改变火光的颜色(改xml的话光照是白色的,很奇怪,我在代码里产生点光源可以修改颜色为橘黄色,更顺眼)
最重要的是,这样还能在代码里判断击中敌人后就点燃敌人,同时造成火焰燃烧伤害。
然后奇怪的事情发生了,任何附着到一个活着的agent的GameEntity上的粒子效果都不能显示
- ParticleSystem particle = ParticleSystem.CreateParticleSystemAttachedToEntity("psys_game_burning_agent", weaponEntity, ref localFrame);
复制代码
weaponEntity是玩家当前拿着的剑的GameEntity,这行代码没有效果,运行之后,挥舞着的剑不会产生火焰。
但是奇怪的是只要我把剑扔到地上,剑上就会起火,粒子效果就能正常产生。
最后我还是找到了一个办法将ParticleSystem附着到一个活着的agent上:
- Agent.Main.AgentVisuals.CreateParticleSystemAttachedToBone("psys_game_burning_agent",
- Game.Current.HumanMonster.MainHandItemBoneIndex, ref localFrame);
复制代码
终于!有效果了!虽然是通过直接在玩家的手骨骼上添加粒子效果,但是确实让挥舞的剑上产生了火焰,看起来很棒,我成功实现了火焰剑,一切都没问题了对吧?
当然不!这个API并不会返回产生的ParticleSystem的引用,所以我根本没办法控制,没办法让粒子在需要的时候消失,比如换武器或者空手后,火焰仍然会存在于手上。
以下是我研究 ParticleSystem 时弄出的一些好玩好看的效果,包括火焰剑,火焰射线,让agent全身着火
重述一遍,我的目标是做一个能点燃击中的敌人和地形的火焰箭+火焰剑的mod
现在已经可以用代码逻辑给敌人造成伤害
已经实现了火焰箭的效果
已经实现火焰剑的特效,但是有缺陷,无法移除粒子
并且已经可以将击中的敌人点燃,还是同一个问题,点燃后就没办法熄灭
最大的问题就是拿不到生成的这个ParticleSystem的引用。
我同样还尝试过以下代码
- ParticleSystem particle = ParticleSystem.CreateParticleSystemAttachedToBone("psys_game_burning_agent",
- Agent.Main.AgentVisuals.GetSkeleton(), Game.Current.HumanMonster.MainHandItemBoneIndex, ref localFrame);
复制代码
这个方法跟Agent.Main.AgentVisuals.CreateParticleSystemAttachedToBone() 作用相似,但是会返回产生的ParticleSystem,本来是很完美的
但是问题是这个就是我一开始说的问题,它没效果,粒子效果不会显示。
目前唯一一个可以在活的agent身上产生粒子效果的方法就是AgentVisuals.CreateParticleSystemAttachedToBone(),但是它却不返回ParticleSystem的引用。 |
评分
-
参与人数 1 | 荣誉 +1 |
第纳尔 +20 |
互助 +1 |
收起
理由
|
小丑遊戲
| + 1 |
+ 20 |
+ 1 |
文章不错,继续<span id="transmark" |
查看全部评分
|