角色

  • 类型:Avatar

描述

Avatar是一个特殊对象,它使子级自定义零件们作为角色成为一个整体,它具有物理属性和与各种组件交互的能力。

Avatar作为父级,使用自定义零件作为其子级组合成人体模型。默认情况下,Avatar的人体模型通常由:核心、头、胸、臀部、左肩、左大臂、左手、右肩、右大臂、右手、左大腿、左小腿、左脚、右大腿、右小腿、右脚等16个部位组成。身体部位缺失或名称不符时,皆认为缺失。在角色加载到客户端时,缺失部位不会补全。

修改Avatar外观时,可添加上衣裤子鞋子配饰等改变外观效果。

人物模型的物理交互都通过Avatar产生。

  • 如何创建角色
    点击工作区后的”+”,在可添加的对象中选择角色,可直接创建模板角色,分男孩、女孩两种角色。
    文末提供脚本创建角色的示例。

  • 角色生成原理
    游戏运行时,如果开启了玩家列表下的角色是否自动生成,玩家进入游戏时会自动加载其平台角色,作为游戏内玩家操作的角色。
    如果关闭了玩家列表下的角色是否自动生成,玩家进入游戏时不会自动加载其平台角色,开发者可以自行写脚本控制玩家所使用的角色(比如通过调用LoadCharacter(TarObject)函数实现选择角色,队伍的功能)。

  • 角色的特性

  1. 角色由关节、连接点和自定义零件构成,控制器控制其状态。
  2. 修改身体体型可以缩放角色的大小,单独调整连接点并不能马上生效,需要配合调整身体体型,才能调整角色骨骼。
  3. 角色的每个身体部位(自定义零件)都有自己独立的物理属性(刚体属性)。
  4. 角色的身体部位通过命名规则来对应自己的骨骼,命名规则见身体部位。
  5. 角色的各项属性可以在角色属性栏快速定义。
  6. 角色当前生命值为0时角色死亡,死亡时有布娃娃和碎裂两种效果可供选择,角色死亡后会在出生点复活。
  7. 运行后的角色属性由玩家初始化中的平台自定义角色来控制,外观来自平台。如果在玩家初始化中添加角色,角色默认位置排在平台自定义角色之上,运行后的角色将采用新添加的角色。
  • 身体部位
部位 名称
核心 Root
臀部 Hip
左大腿 LeftUpperLeg
左小腿 LeftLowerLeg
左脚 LeftFoot
右大腿 RightUpperLeg
右小腿 RightLowerLeg
右脚 RightFoot
Chest
Head
左肩 LeftShoulder
左大臂 LeftArm
左手 LeftHand
左手掌 LeftPalm
右肩 RightShoulder
右大臂 RightArm
右手 RightHand
右手掌 RightPalm

相关链接

  • 教学视频

属性

    Position     坐标   Vector3   
    显示对象的坐标,分为世界坐标和相对坐标

    Rotation     朝向   Vector3   
    显示对象的世界朝向

    ShowName     名字   string   
    角色显示的名字

    MaxHealth     最大生命   int   
    角色的生命值上限

    Health     当前生命   int   
    角色的当前生命值,当前生命值小于等于0时角色会死亡

    HealthDisplayType     生命显示模式   Enum.HealthDisplayMode   
    角色生命条的显示模式,有一直显示,不显示和掉血后显示3种

    NameEnable     名字是否显示   bool   
    控制角色的名字是否显示

    MoveSpeed     移动速度   float   
    角色的移动速度

    JumpSpeed     跳跃初速度   float   
    角色跳跃时向上的初速度

    ClimbRate     攀爬速率   float   
    角色攀爬速度与移动速度的比值

    DisplayDistance     信息显示距离   float   
    角色头顶信息的显示距离,包括名字和血条

    HumanCameraOffset     相机拍摄点偏移   Vector3   
    摄像机在拍摄此角色时附加的偏移量

    DeadMode     死亡表现   Enum.DeadShowMode   
    角色死亡时的表现,有布娃娃表现和碎裂表现两种

    GravityMultiplier     重力倍数   float   
    角色会受到的重力影响的倍数

    PlayerId     对应的玩家Id   string    [只读]
    对应的玩家Id

    ForceFiledDuration     无敌时间   float    [只读]
    玩家当前剩余无敌时间

    IsAutoRotate     自动转向   bool   
    控制角色是否随着移动方向自动转向

    SubjectSeat     座位   RWObject    [只读]
    对角色当前所在座位的引用,如果有则显示,没有则为空;包括座位和驾驶座位。

    MoveOrientation     移动方向   Vector3    [只读]
    角色行走的方向。

    ResurrectionTime     复活时间   float   
    复活时间

    EffectSwitch     出生特效启用   bool   
    出生特效启用

    StableMode     物理模式   Enum.StableMode   
    物理角色的应用程度,NPC不受影响

    AvatarStatusSwitch     角色状态启用   bool   
    角色能否在各种状态间切换,默认为不勾选

继承自RWObject

    Name     名称   string   
    该对象的自定义名称

    ClassName     类型   string   
    该对象对应的对象类型名称

    Parent     父级   RWObject   
    该对象的父级对象

函数

    GetLandMaterial()
    获取角色脚下站立位置的材质名称

    Sit(seatObj)
    使角色进入乘坐状态,并且与指定的座位/驾驶位固定

    Jump()
    使角色进行一次跳跃

    AddAccessory(Accessoryobj)
    使角色佩戴指定的角色配饰

    EquipTool(toolobj)
    使角色装备指定的工具对象

    UnEquipTool()
    卸载角色正在装备的工具

    GetAccessories()
    获取角色佩戴的所有角色配饰,将其角色配饰对象作为列表返回

    GetPlayingAnimation()
    获取角色正在播放的动画对象,作为列表返回

    GetState()
    获取角色的状态

    Move(direction,autoturn)
    使角色向指定方向移动

    MoveTo(part,time)
    限定时间内,使角色向指定的对象对应的XZ坐标移动。

    MoveTo(position,time)
    限定时间内,使角色向指定的点对应的XZ坐标移动。

    MoveTo(part,position,time)
    限定时间内,使角色向指定的对象的相对位置对应的XZ坐标移动。

    NavigateTo(TagetPoint)
    使角色沿导航网格移动。自动用MoveTo移动到导航网格点

    StopNavigation()
    停止角色的沿导航网格移动

    RemoveAccessories()
    移除角色身上所有的角色配饰

    GetCurrentEquip()
    返回当前装备的工具对象

    TakeDamage(damageValue)
    使角色的生命值降低,根据参数决定降低的数值

    Heal(HealValue)
    使角色的生命值增加,根据参数决定增加的数值

    BeKilled()
    使角色进入死亡状态

    SetAvatarStateEnabled(state,value)
    设置该动作状态是否可以进入

    GetAvatarStateEnabled(state)
    查询该动作状态是否可以进入

    EnterLostControl(lostMode)
    使角色进入失控状态

    ExitLostControl()
    使角色离开失控状态

    SpecialStateChanged(state)
    返回要监听的指定状态变化的事件

    ReBuildAvatarRig()
    使角色进行重定向

继承自RWObject

    DelAllChild()
    删除所有子对象

    Available()
    检查对象是否可用

    Clone(parent)
    复制自身,若有参数则以参数为父级

    Destroy()
    删除自身

    GetAncestorByName(Name)
    通过对象名字寻找父级对象

    GetAncestorByClassName(className)
    通过对象类型寻找父级对象

    GetChildByName(Name,recursive)
    通过对象名字寻找子级对象

    GetChildByClassName(className,recursive)
    通过对象类型寻找子级对象

    GetAllChild()
    寻找自身所有子级对象,并作为一个列表返回

    GetAllDescendant()
    递归寻找自身所有后代,并作为一个列表返回

    IsAncestor(TarObj)
    判断自身是否为目标对象的祖先

    IsDescendant(TarObj)
    判断自身是否为目标对象的后代

    WaitForChild(childName,timeout)
    寻找自身的子对象。如果没有子对象,在没有填写timeout参数时,会暂停进程直到找到子对象;如果填写了timeout参数,会根据参数时间暂停进程,超出参数时间后,进程照常进行

    Child(childName)
    根据给定的名字寻找自身的子对象

    Equals(TarObj)
    判断自身是否为目标对象,结果为真返回True,结果为假返回False;注意克隆、新建同类型、同名对象,equal结果均为假

    IsClass(className)
    判断自身是否为给定的对象类型

事件

    onMoveToFinished(result)
    在MoveTo函数执行完毕后,触发此事件

    OnAvatarEnterState(state)
    角色进入动作状态时,触发此事件

    OnAvatarExitState(state)
    角色离开动作状态时,触发此事件

    AvatarStateEnabledChanged(state, value)
    监听状态的禁用或启用时,触发此事件

    onEnterSeatState()
    进入乘坐状态时触发

    onLeaveSeatState()
    离开乘坐状态时触发

    onEnterDriveState()
    进入驾驶状态时触发

    onLeaveDriveState()
    离开驾驶状态时触发

    onHealthChange(healthChangeValue)
    角色生命值变化时,触发此事件

    onAvatarDead()
    角色进入死亡状态时,触发此事件

    onAvatarAnimationPlayed()
    角色动画开始播放时,触发此事件

    TriggerEnter(res1, res2)
    自身进入触发状态时,触发该事件

    TriggerExit(res1, res2)
    自身结束触发状态时,触发该事件

继承自RWObject

    Destroyed()
    删除自身时触发

    ChildAdded(childobject)
    添加子对象时触发

    ChildRemoved(childobject)
    移除子对象时触发

    DescendantAdded(descendantobject)
    添加后代时触发

    DescendantRemoved(descendantobject)
    移除后代时触发

    AncestryChanged(AncestryChanged)
    祖先变更时触发

实例

用脚本创建角色对象,让角色移动到创建的零件的位置。

GameSetting.NavMeshOpen = true -- 游戏的导航网格开启设置
local person = RWObject.Create("Avatar") -- 创建角色
local part = RWObject.Create("Part") -- 创建零件
part.Position = Vector3.New(0,0.125,10) -- 设置零件的位置
person.Position = Vector3.New(50,0.125,50) -- 设置角色的位置
wait(1) -- 等待1
person:MoveTo(part.Position) -- 角色向着零件的位置移动
文档更新时间: 2020-09-27 16:22   作者:刘征