骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 衣谷三国
查看: 8634|回复: 10

[霸主] 关于骑砍2的粒子系统 ParticleSystem 的研究

[复制链接]

90

主题

833

回帖

2642

积分

贵族[MOD作者]

独立制作人 [大神]
《火焰领主》MOD发布帖

Rank: 7Rank: 7Rank: 7

UID
46026
第纳尔
2902
精华
5
互助
119
荣誉
127
贡献
164
魅力
29
注册时间
2007-10-26

骑士美德之正义勋章[杰出会员荣誉勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之忠诚勋章[杰出会员精华勋章]骑士美德之谦恭勋章[杰出会员财富勋章]原版正版勋章

QQ
鲜花(35) 鸡蛋(0)
发表于 2020-4-18 01:52:23 | 显示全部楼层 |阅读模式
本帖最后由 暗暗十分 于 2020-4-18 04:54 编辑

我已经尝试过能在大部分的GameEntity上附加粒子效果了

  1. ParticleSystem particle = ParticleSystem.CreateParticleSystemAttachedToEntity("psys_game_burning_agent", missile.Entity, ref localFrame);
复制代码


这行代码的效果是在飞行物(箭矢)上附加一个燃烧的粒子效果,从而实现火焰箭。
我知道现在通过修改物品的xml文件就能简单实现火焰箭,但是那个实现是有局限的,只有视觉效果,而且还不能保留箭矢,射中就消失,而如果取消到射中即消失的burning="true"的flag,箭矢虽然会留下,但是燃烧粒子也会一直存在,箭多了之后会占用极大的显存,造成卡顿
而通过代码产生粒子效果来实现的话,就能对粒子进行控制,从而实现射中后箭矢存留且火焰消失,还能改变火光的颜色(改xml的话光照是白色的,很奇怪,我在代码里产生点光源可以修改颜色为橘黄色,更顺眼)
最重要的是,这样还能在代码里判断击中敌人后就点燃敌人,同时造成火焰燃烧伤害。

然后奇怪的事情发生了,任何附着到一个活着的agent的GameEntity上的粒子效果都不能显示


  1. ParticleSystem particle = ParticleSystem.CreateParticleSystemAttachedToEntity("psys_game_burning_agent", weaponEntity, ref localFrame);
复制代码

weaponEntity是玩家当前拿着的剑的GameEntity,这行代码没有效果,运行之后,挥舞着的剑不会产生火焰。
但是奇怪的是只要我把剑扔到地上,剑上就会起火,粒子效果就能正常产生。

最后我还是找到了一个办法将ParticleSystem附着到一个活着的agent上:

  1. Agent.Main.AgentVisuals.CreateParticleSystemAttachedToBone("psys_game_burning_agent",
  2.                             Game.Current.HumanMonster.MainHandItemBoneIndex, ref localFrame);
复制代码

终于!有效果了!虽然是通过直接在玩家的手骨骼上添加粒子效果,但是确实让挥舞的剑上产生了火焰,看起来很棒,我成功实现了火焰剑,一切都没问题了对吧?
当然不!这个API并不会返回产生的ParticleSystem的引用,所以我根本没办法控制,没办法让粒子在需要的时候消失,比如换武器或者空手后,火焰仍然会存在于手上。

以下是我研究 ParticleSystem 时弄出的一些好玩好看的效果,包括火焰剑,火焰射线,让agent全身着火


(点击展开 / 收起)


重述一遍,我的目标是做一个能点燃击中的敌人和地形的火焰箭+火焰剑的mod
现在已经可以用代码逻辑给敌人造成伤害
已经实现了火焰箭的效果
已经实现火焰剑的特效,但是有缺陷,无法移除粒子
并且已经可以将击中的敌人点燃,还是同一个问题,点燃后就没办法熄灭

最大的问题就是拿不到生成的这个ParticleSystem的引用。

我同样还尝试过以下代码

  1. ParticleSystem particle = ParticleSystem.CreateParticleSystemAttachedToBone("psys_game_burning_agent",
  2.                            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"

查看全部评分

您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2025-10-10 04:26 , Processed in 0.092938 second(s), 22 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表