gmod吧 关注:90,847贴子:1,903,664

【wiremod】让你的物体随holo动起来——E2的holoParent教程

只看楼主收藏回复

建造载具的时候,想实现开关门的效果,但是...
怕gmod约束的质量太烂?
怕载具约束太多而卡服?
只用holo也能实现效果!但是...漏风 & 不防弹???
.....
那么你需要——holoParent大法!
效果如图
————



————
这篇教程的目的是:讲解如何移动holo,以及如何把物体parent到holo上
————
最近较忙,先开坑,缓更
欢迎插楼,建议使用只看楼主功能


IP属地:广东1楼2020-04-14 00:42回复
    yeeeeeeeeeeeeeeeeeeeeeeeeeeeee
    sdy带好人


    IP属地:广东2楼2020-04-14 00:47
    收起回复
      2025-09-11 11:58:41
      广告
      不感兴趣
      开通SVIP免广告
      需要的工具:Precision Alignment,Wiremod
      ————
      Precision Alignment:用来找出物体的相对位置,从而快速定位holo,不用手动慢慢调

      ————
      Wiremod:E2你懂的


      IP属地:广东3楼2020-04-14 00:49
      回复
        首先,我们要用Precision Alignment(PA)工具获取物体相对于底盘(base)的坐标
        ————
        随便刷出一块板子当作base

        ————
        随便刷一个物品用来定位holo

        ————
        随便摆到合适位置

        ————
        找到PA工具,选Mass Center或者Coordinate Center,意思分别是质心和坐标中心
        -这样确保PA打出来的点在物体的质心/坐标中心上
        -当然,你直接用HitPos打点也可以,在这里区别不大

        ————
        对base右键,物体左键,按R打开PA菜单,在Point选项里面勾上relative to entity,然后点击copy
        -勾上Relative to Entity一是告诉PA我们要相对坐标,二是更新右侧坐标显示
        -copy是直接复制XYZ三个坐标轴的数据

        ————
        小知识:
        相对坐标就是把坐标系建立在base上,在此坐标系找到物体的坐标
        与之相对的是绝对坐标,相当于坐标系在地图上


        IP属地:广东4楼2020-04-14 13:28
        回复
          牛逼!


          IP属地:中国台湾5楼2020-04-14 19:46
          收起回复
            让我们一起摇摆


            IP属地:天津来自Android客户端6楼2020-04-15 01:58
            回复
              一起摇摆


              IP属地:天津来自Android客户端7楼2020-04-15 01:58
              回复
                下面简单编辑一下E2
                ————
                找到E2工具,直接左键在板子上刷一个出来

                ————
                对着E2按右键编辑,复制粘贴如下内容,保存并更新
                @name Test
                @inputs Base:entity #定义输入变量Base,类型为实体entity
                @outputs
                @persist
                @Trigger
                if(first()) #初始化
                {
                Pos=vec(#[your data]#) #声明局部变量,三维向量,里面的数据需要替换成PA菜单里Copy的数值
                Ang=ang(0) #声明局部变量,角度,ang(0) = ang(0, 0, 0),分别表示俯仰角,偏航角,滚转角
                holoCreate(1) #初始化直接生成holo,序号为1
                holoPos(1, Base:toWorld(Pos)) #设置1号holo的坐标
                holoAng(1, Base:toWorld(Ang)) #设置1号holo的角度
                holoParent(1, Base) #把1号holo Parent到板子上
                }

                ————
                注意把#[your data]#替换成PA菜单里面Copy的数值

                ————
                用wire工具连线,把E2的Base[Entity]连到板子的entity[Entity],之后用E2工具对E2按R刷新

                可以看到已经在易拉罐位置生成了一个holo
                ————
                小知识:
                Global Vector = Entity:toWorld( Local Vector ) #toWorld函数返回相对坐标Vector在Entity坐标系的绝对坐标
                Global Angle = Entity:toWorld( Local Angle ) #角度也可以使用


                IP属地:广东9楼2020-04-15 14:52
                回复
                  2025-09-11 11:52:41
                  广告
                  不感兴趣
                  开通SVIP免广告
                  接着我们让holo动起来,为了简单起见,就先让E2绕圆心转动吧
                  下面的内容主要都是讲解E2了,你也可以在本楼最下面直接复制E2代码
                  ————
                  首先将E2改成这样:
                  @name Test
                  @inputs Base:entity
                  @outputs
                  @persist Pos:vector Ang:angle Radius Yaw #定义全局变量,Pos类型为三维向量,Ang为角度,Radius和Yaw为数字
                  @Trigger
                  interval(50) #E2每50毫秒更新一次,必须让E2一直更新才能实现移动,如果想运动得快一点,可以调低数值,最低10
                  if(first())
                  {
                  Pos=vec(-6.981, 35.17, 21.47) #Pos和Ang已经定义成全局变量了,所以这里只是给他们初始化
                  Ang=ang(0)
                  Radius=30 #初始化变量,把圆周运动的半径设置成30起源单位
                  holoCreate(1)
                  holoPos(1, Base:toWorld(Pos))
                  holoAng(1, Base:toWorld(Ang))
                  holoParent(1, Base)
                  }
                  Yaw++ #让Yaw变量一直自加1,相当于自变量,自变量变了因变量才会跟着变
                  if(Yaw>=360)
                  {
                  Yaw=0 #因为E2中三角函数用的单位是°,所以当Yaw大于等于360°就变回0,相当于走完一个周期
                  }
                  MoveAng = ang(0, Yaw, 0) #holo转动的角度,只要转动偏航角就行
                  MovePos = vec(Radius * sin(Yaw), Radius * cos(Yaw), 0) #holo运动的坐标,X轴是Radius * sin(Yaw),Y轴是Radius * cos(Yaw),Z轴为0,初中数学
                  holoPos(1, Base:toWorld(Pos + MovePos)) #最终给holo设置的坐标就是初始坐标 + 运动坐标
                  holoAng(1, Base:toWorld(Ang + MoveAng)) #角度同理

                  效果:

                  holo转动的角度反了啊...再改改
                  ————
                  改动:
                  26行MoveAng = ang(0, Yaw, 0),在Yaw前面加一个负号,变成MoveAng = ang(0, -Yaw, 0)

                  ————
                  最终效果:

                  E2代码:
                  @name Test
                  @inputs Base:entity
                  @outputs
                  @persist Pos:vector Ang:angle Radius Yaw
                  @trigger
                  interval(50)
                  if(first())
                  {
                  Pos=vec(-6.981, 35.17, 21.47)
                  Ang=ang(0)
                  Radius=30
                  holoCreate(1)
                  holoPos(1, Base:toWorld(Pos))
                  holoAng(1, Base:toWorld(Ang))
                  holoParent(1, Base)
                  }
                  Yaw++
                  if(Yaw>=360)
                  {
                  Yaw=0
                  }
                  MoveAng = ang(0, -Yaw, 0)
                  MovePos = vec(Radius * sin(Yaw), Radius * cos(Yaw), 0)
                  holoPos(1, Base:toWorld(Pos + MovePos))
                  holoAng(1, Base:toWorld(Ang + MoveAng))


                  IP属地:广东10楼2020-04-15 15:31
                  回复
                    sdy啊你终于更新这个了我哭了
                    我从18年等到现在


                    IP属地:广东11楼2020-04-16 08:43
                    回复
                      我哭了,正好解决了我自动装弹机怎么运动的问题 sdy我爱你啊啊啊啊啊啊我要电牛☞


                      IP属地:广东12楼2020-04-16 08:48
                      收起回复
                        属实带好淫


                        IP属地:吉林13楼2020-04-17 19:40
                        回复
                          下面试试把物体parent到holo
                          ————
                          首先在控制台输入wire_expression2_extension_enable propcore

                          控制台会提示10秒后重载E2

                          ————
                          然后随便刷一个物体

                          随便摆到一个位置,冻结
                          ————
                          更新E2为以下内容:
                          @name Test
                          @inputs Base:entity Breen:entity #添加一个接口用来输入新的实体
                          @outputs
                          @persist Pos:vector Ang:angle Yaw Open Z #运动参数变为Z,并用按键控制Open来达到开关效果
                          @Trigger
                          interval(50)
                          if(first())
                          {
                          Pos=vec(-6.981, 35.17, 21.47)
                          Ang=ang(0)
                          Open=-1 #初始化Open为-1
                          holoCreate(1)
                          holoPos(1, Base:toWorld(Pos))
                          holoAng(1, Base:toWorld(Ang))
                          holoParent(1, Base)
                          BreenPos=vec(#[your vec here]#) #初始化新实体相对坐标
                          BreenAng=ang(#[your ang here]#) #初始化新实体绝对角度
                          Breen:setPos(Base:toWorld(BreenPos)) #初始化的时候设置新实体坐标
                          Breen:setAng(BreenAng) #初始化的时候设置新实体角度
                          Breen:propFreeze(1) #初始化冻结物体,不然可能会往下掉
                          #Breen:parentTo(holoEntity(1)) #先不要Parent物体,不然不能调物体坐标
                          }
                          G=owner():keyPressed("g") #检测E2主人是否按G键
                          if(changed(G)&G) #changed( variable )函数检测变量是否改变,改变返回1,这里是检测按键按下一刻返回1
                          {
                          Open=-Open #开关变量变负
                          }
                          Z=clamp(Z+Open, 0, 10) #运动参数,自加Open,并限制在0和10之间,这里Open相当于运动速度
                          MovePos=vec(0, 0, Z)
                          MoveAng=ang(0)
                          holoPos(1, Base:toWorld(Pos + MovePos))
                          holoAng(1, Base:toWorld(Ang + MoveAng))

                          ————
                          按照之前的步骤用PA得到物体的相对坐标


                          获取绝对角度


                          ————
                          用wire工具连接E2的新接口到实体上


                          IP属地:广东14楼2020-04-26 20:57
                          回复
                            接上楼
                            ————
                            用E2工具对E2按R,刷新E2


                            ————
                            然后E2工具右键E2打开编辑器,把第27行的注释符号删除,Upload

                            ————
                            按G键可以看到效果了

                            ——***注意***——
                            如果在物体调好位置前,不注释27行,物体直接就被parent到holo,无法改变相对位置了

                            *parent之后无论怎么刷新,物体不能移动到目标位置

                            *注释parent,先调好物体位置,再删除注释,物体才会移动到目标位置
                            所以parent前务必再三检查!


                            IP属地:广东15楼2020-04-26 21:08
                            回复
                              2025-09-11 11:46:41
                              广告
                              不感兴趣
                              开通SVIP免广告
                              主要内容已经结束了,下面再讲解一下如何实现holo多段运动,平滑运动以及一些实例


                              IP属地:广东16楼2020-04-26 21:22
                              回复