移动范围与移动路径

目录

一、设置移动范围

二、预设移动路径

三、SAI实现路径移动

四、设置移动阵型

举例


一、设置移动范围

creature.movementtype = 1

creature.spawndist = '移动范围'(在此范围内自由移动)

二、预设移动路径

creature.movementtype = 2

creature_addon.path_id = pathid(预设的路径ID),链接 waypoint_data.id

waypoint_data

  • id = pathid
  • point =1,2,3,...
  • position_x,position_y,position_z,orientation (路径点坐标、方位,游戏中用GM账号输入“.gps”获取)
  • delay(前往下一路径点前的等待时间,ms)
  • action(动作ID)
  • action_chance(动作触发的几率)

三、SAI实现路径移动

smart_script

  • event_type
    • 39(SMART_EVENT_WAYPOINT_START)
    • 40(SMART_EVENT_WAYPOINT_REACHED)
    • 55(SMART_EVENT_WAYPOINT_PAUSED)
    • 56(SMART_EVENT_WAYPOINT_RESUMED)
    • 57(SMART_EVENT_WAYPOINT_ENDED)
    • 58(SMART_EVENT_WAYPOINT_STOPPED)
  • action_type
    • 53(SMART_ACTION_WP_START)
    • 54(SMART_ACTION_WP_PAUSE)
    • 55(SMART_ACTION_WP_STOP)

waypoints

  • entry(路径编号,一般与creature的entry一致)
  • pointid = 1,2,3,...
  • position_x,position_y,position_z(路径点坐标,游戏中用“.gps”获取)

四、设置移动阵型

creature_formations

  • leaderGUID(头领creature的GUID)
  • memberGUID(阵型成员的GUID)
  • dist(成员与头领之间的距离)
  • angle(成员与头领间的角度,0-360)

  • groupAI(利用此字段可实现多个生物之间的联动)
ValueBehavior
0Noone assists noone and member don't follow the leader
512Noone assists noone and member follow the leader
1The member aggroes if the leader aggroes
2The leader aggroes if the member aggroes
3Everyone assists everyone and member don't follow the leader
515Everyone assists everyone and member follow the leader

举例

  • 阵型成员的 MovementType 应设置为 0(creature.MovementType)

 (creature_formations 表)

(creature 表)

(creature_addon 表,其中 path_id 链接 waypoints.entry)

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Unity中,可以使用Transform组件来实现游戏对象路径移动。以下是一种常见的路径移动方法: 1. 创建一个空物体作为路径节点的父物体,并将路径节点作为其子物体。 2. 在需要进行路径移动的游戏对象上添加一个脚本。 3. 在脚本中定义一个公共变量来引用路径节点的父物体,并在Unity编辑器中将其赋值。 4. 使用动态数组存储路径节点的位置信息。可以通过遍历路径节点的父物体的子物体来获取每个节点的位置,并将其添加到数组中。 5. 使用插值方法(如Lerp或Slerp)在每一帧中计算游戏对象的位置,使其沿路径移动。 下面是一个简单示例代码: ```csharp using UnityEngine; public class PathMovement : MonoBehaviour { public Transform pathParent; public float speed = 5f; private Transform[] pathNodes; private int currentNodeIndex = 0; private void Start() { // 获取路径节点 pathNodes = new Transform[pathParent.childCount]; for (int i = 0; i < pathParent.childCount; i++) { pathNodes[i] = pathParent.GetChild(i); } } private void Update() { // 沿路径移动 if (currentNodeIndex < pathNodes.Length) { Vector3 targetPosition = pathNodes[currentNodeIndex].position; transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime); if (transform.position == targetPosition) { currentNodeIndex++; } } } } ``` 以上代码假设你已经创建了一个空物体作为路径节点的父物体,将其赋值给`pathParent`变量。可以通过调整`speed`变量来控制移动速度。 在Unity编辑器中,将脚本组件添加到需要进行路径移动的游戏对象上,并将路径节点的父物体赋值给`pathParent`变量。启动游戏后,游戏对象将沿路径移动

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值