猫史档案馆


【代码岛教程教程】激光特效ta来啦

用户:追梦喵aowC追梦喵aowC查看:19 回复:21 评论:19 创建时间:2021-08-30T10:37:36


众所周知玩家发射激光的特效可谓是肥肠nice)

所以今天就直奔主题,如何做一个激光的攻击特效?

首先我们要知道激光的长度是不好把握的,所以为了方便我用了单个的激光模型经过多次放置组合成一段比较长的模型,通过控制for循环的次数就可以控制激光的长度(虽说有亿点卡)

首先我们先写好大体的框架

world.onPress(async({ button, entity, raycast }) => { //事件
    if(button ==='action0'){
    
    }
})

然后再用for循环放置模型拼接成一个长的激光

world.onPress(async({ button, entity, raycast }) => { //事件
    if(button ==='action0'){
    for(let i=1/*这里必须是1*/;i<=20;i++)//因为我的模型比较小所以要放20次
{
        const w =world.createEntity({//放个模型
    mesh:"mesh/new_del.vb",//这里随便用了个模型
    fixed:false,
    gravity:false,
    collides:false,
    meshScale:[0.1,0.1,0.1],//缩放
    
    meshEmissive: 1,
    position:[entity.position.x+i*raycast.direction.x*2,entity.position.y+ i*raycast.direction.y*2,entity.position.z+ i*raycast.direction.z*2],//这里是神奇的规定格式)
    }) 
   
    }
}
})

别问我这缩进怎么这么“美观”()()

 

 

所以为什么是这个亚子呢)

center_image

因为这里还有个问题)就是模型的旋转并没有调)所以运行了就会出现神奇的bug)))

所以我们先去天启扒下来04的旋转公式(划掉)

world.onPress(async({ button, entity, raycast }) => { //事件
    if(button ==='action0'){
    for(let i=1;i<=20;i++)
    {
        const Quat = new Box3Quaternion(0,0,0,1);//这里是初始的方向
        const w =world.createEntity({//放个模型
    mesh:"mesh/new_del.vb",
    fixed:false,
    gravity:false,
    collides:false,
    meshScale:[0.1,0.1,0.1],
    
    meshEmissive: 1,
    position:[entity.position.x+i*raycast.direction.x*2,entity.position.y+ i*raycast.direction.y*2,entity.position.z+ i*raycast.direction.z*2],//这里是神奇的规定格式)
    }) 
    w.meshOrientation=Quat.rotateX(Math.atan2(raycast.direction.y, Math.sqrt(raycast.direction.x ** 2 + raycast.direction.z ** 2))).rotateY(
    Math.atan2(raycast.direction.z, raycast.direction.x))//这里是神奇的旋转)
    }
    
    }
})

这个时候就已经比较像样了

但是因为没有删除)

所以就会变成这个样)center_image

我们再加上setTimeout来删除激光

world.onPress(async({ button, entity, raycast }) => { //事件
    if(button ==='action0'){
    for(let i=1;i<=20;i++)
    {
        const Quat = new Box3Quaternion(0,0,0,1);//这里是初始的方向
        const w =world.createEntity({//放个模型
    mesh:"mesh/new_del.vb",
    fixed:false,
    gravity:false,
    collides:false,
    meshScale:[0.1,0.1,0.1],//缩放
    meshEmissive: 1,//发光度
    position:[entity.position.x+i*raycast.direction.x*2,entity.position.y+ i*raycast.direction.y*2,entity.position.z+ i*raycast.direction.z*2],//这里是神奇的规定格式)
    }) 
    w.meshOrientation=Quat.rotateX(Math.atan2(raycast.direction.y, Math.sqrt(raycast.direction.x ** 2 + raycast.direction.z ** 2))).rotateY(
    Math.atan2(raycast.direction.z, raycast.direction.x))//这里是神奇的旋转)
   
        setTimeout(()=>{
        w.destroy()//摧毁激光单个节段
        },200);//过200毫秒后执行
    
    }
    
    }
})

现在整个特效已经基本完成了

聪明的童鞋还可以加上区域判断来检测受伤)

不是天启的源码)是我拍脑袋想的)

以上就是全部教程啦

 

那么怎样才能食用此教程呢?

首先拿出yhh就地踩Infinity次(doge)

然后添加一个激光模型把文件名改成new_del

如果想要更长一点就改改for循环里的数字

祝你吃的开心(滑稽)

 


回复

上一页1 页 / 共 1下一页
未命名用户015734未命名用户015734

踩yhh好评(什

追梦喵是神.jpg

点赞1


评论


追梦喵aowC追梦喵aowC

感谢04的神奇旋转代码

点赞1


评论


时当日色QWQ时当日色QWQ

喵喵

点赞1


评论


时当日色QWQ时当日色QWQ

激光来射yhh(doge)

点赞2


评论


凌_墨水凌_墨水

用await sleep删除激光不是更简短吗

点赞1


评论


成熟的强袭编程猫548成熟的强袭编程猫548

前排,踩好评()

点赞0


评论


Forzen_SevenForzen_Seven

raycast会返回一个distance,可以判断激光的距离,放置激光射穿墙

点赞0


评论


追梦喵aowC追梦喵aowC

顶一下

点赞0


评论


编码喵编码喵

元气世界的激光枪升级版?

点赞0


评论


编码喵编码喵

追梦喵找你好久啦

点赞0


评论


AlcalaAlcala

ddd,等好久这个了)

点赞0


评论


凌_墨水凌_墨水

  

点赞0


评论


不知道该叫啥的一只萌新不知道该叫啥的一只萌新

喵d

点赞0


评论


编码喵编码喵

追梦啥时候有空呀

点赞0


评论


async_functionasync_function

awa

点赞0


评论


小小瓢虫小小瓢虫

针不戳

点赞2


评论


时当日色QWQ时当日色QWQ

看一下星河灿烂的留言

点赞0


评论


SKQASKQA

不能直接发射一个激光模型吗,非要一段一段接上()

点赞0


评论


星辰Lolita星辰Lolita

旋转公式明明是我的!!! https://shequ.codemao.cn/community/385699

点赞0


评论


憨白不憨awa憨白不憨awa

az

点赞0


评论


难起的名字难起的名字

ddd(

点赞0


评论