通过实例学习Virtools脚本语言VSL - 将物体排列于圆周上

简介: 该系统演示了怎样用VSL来操纵三维实体及复制物体。 开始一个新作品并在3D Layout工作区添加一些随机的物体(或创建一些三维帧 - 3D Frame)。创建一个组(Group)并将所有物体添加到该组中。

该系统演示了怎样用VSL来操纵三维实体及复制物体。

  1. 开始一个新作品并在3D Layout工作区添加一些随机的物体(或创建一些三维帧 - 3D Frame)。创建一个组(Group)并将所有物体添加到该组中。

    注意:如果你用的是3D Frame,请确保你在3D Layout - Rendering preferences 面板中的播放器模式(Player Mode)处勾选了"Show All Frames"框,以便在播放模式下能看到那些3D Frame。
  2. 在层级(Level)下创建一个脚本并添加一个Run VSL BB。在VSL Script Manager中,添加两个pIn参数:第一个叫做"objGroup"且为Group类型,第二个叫做"radius"且为float类型。
  3. 讲以下代码复制到代码视图,并编译VSL脚本:
    void main()
    {
    // Get number of objects
    int nbObject = objGroup.GetObjectCount();

    // Calculate angle betwen each objets
    float angle = 2*pi/nbObject;

    Vector pos(0,0,0);

    // Place each object on the circle
    for (int i = 0; i < nbObject; ++i)
    {
    // We get the nth object and cast it in Entity3D
    Entity3D obj = Entity3D.Cast(objGroup.GetObject(i));

    // If cast failed obj is null so we skip process...
    if (!obj)
    continue;

    // Compute object position
    pos.x = radius*sin(i*angle);
    pos.z = radius*cos(i*angle);

    // Place object
    obj.SetPosition(pos, null, true);
    }
    }
  4. 在Schematic工作区,按如下方式编辑你的Run VSL BB的参数:
    • objGroup = Group1 (或者是你自己给那个组 - group所选的名字)
    • radius = 10
  5. 运行该VSL脚本。你就会看到3D Layout工作区中所有物体都均匀分布在圆周上。

    可以对这个脚本进行一个有趣的修改:使用单个物体,在运行时将它复制几遍,即不是在起始时就有几个物体。

  6. 在VSL Script Manager工作区中,移除那个代表组的pIn参数并再添加两个pIn:一个叫做"originalObject"且类型为Entity3D,另一个叫做"nbOject"且类型为int。然后按以下内容修改你的代码:
    void main()
    {
    // Calculate angle betwen each objets
    float angle = 2*pi/nbObject;

    Vector Pos(0,0,0);

    // Place each object on the circle
    for (int i = 0; i < nbObject; ++i)
    {
    // We copy a nth object and cast it in Entity3D
    Entity3D obj = Entity3D.Cast(bc.Copy(originalObject, true, true));

    //If cast failed obj is null so we skip process...
    if (!obj)
    continue;

    // Compute object position
    pos.x = radius*sin(i*angle);
    pos.z = radius*cos(i*angle);

    // Place object
    obj.SetPosition(pos, null, true);
    }
    }
  7. 编辑你的pIn参数,编译VSL脚本然后运行它。

    你会看到你的原始对象按指定的次数被复制,并且所有对象被均匀分布在圆周上。注意:那些复制出来的物体是以动态方式创建的(由bc对象 的"Copy"方法中的第二个参数控制)。所以如果你按了Reset键,你所有动态创建的物体会被销毁。
目录
相关文章
|
机器人 图形学 Ruby
【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制
【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制
|
图形学 索引
【unity每日一记】-物体创建,获取,查找,继承
【unity每日一记】-物体创建,获取,查找,继承
123 0
零基础VB教程037期:物体运动界限如何判定?引入line控件
零基础VB教程037期:物体运动界限如何判定?引入line控件
物体交互操作之鼠标拖动物体任意移动(Unity3D)
物体交互操作非常的多,比如说用鼠标拖动物体移动,用鼠标拖动物体旋转,用鼠标滑动让物体放大和缩小。 下面就用代码演示一下如何使用鼠标拖动物体移动。
|
vr&ar 图形学
【Unity3D 灵巧小知识点】 ☀️ | 层级面板中的 ‘小手指‘ 作用: 在Scen中将该物体设置为不可选中状态
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
【Unity3D 灵巧小知识点】 ☀️ | 层级面板中的 ‘小手指‘ 作用: 在Scen中将该物体设置为不可选中状态
|
vr&ar 图形学
【Unity3D 灵巧小知识点】☀️ | Unity 屏幕坐标 和 世界坐标 之间相互转换
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。
|
vr&ar 图形学
【Unity3D 灵巧小知识点】☀️ | Unity 四元数、欧拉角 与 方向向量 之间转换
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。
|
Android开发
第二十一章:变换(十四)
3D-ish旋转 即使计算机屏幕是平面和二维的,也可以在这些屏幕上绘制视觉对象,使其具有第三维的外观。 在本章的前面,您看到了一些文本效果,它们提供了第三个维度的提示,而Xamarin.Forms支持两个额外的旋转,名为RotationX和RotationY,它们似乎也突破了屏幕固有的二维平面度。
1391 0
|
图形学
Unity射线检测的用法总结
RayCast 射线检测 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分...
2783 0