【问题标题】:Instantiate object(s) between two other objects在其他两个对象之间实例化对象
【发布时间】:2013-09-27 06:29:13
【问题描述】:

我目前能够移动两个物体(两个栅栏杆)并在它们之间拉伸一个物体,充当栅栏中的电线。 在此处查看已解决的问题以获取更多信息:instantiate plane with texture between two objects(vectors)

我希望能提供一些关于如何在两者之间实例化极点以及拥有已经工作的电线的意见。 例如,每次两个物体之间的距离增加时,例如1. 我这样计算距离: Vector3.Distance(currentPole1.position,currentPole2.position));

并且猜测一个 for 循环可以进行检查,但似乎无法弄清楚这一点。 谢谢, 克罗

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    给定两个 Vector3 坐标,p1p2,我们可以计算出它们之间均匀分布的 X 个点:

    Vector3 p1 = <some vector>
    Vector3 p2 = <some vector>
    int numPoints = 9;
    
    float step = 1f / (numPoints+1);
    for (float perc = step; perc < 1f; perc += step) {
        Vector3 v = Vector3.Lerp(p1, p2, perc);
        //do something at position v
    }
    

    或者我们可以计算几个点,每个点最多相隔 X 个单位:

    Vector3 p1 = <some vector>
    Vector3 p2 = <some vector>
    float maxSpacing = 10f;
    
    Vector3 diff = p2 - p1;
    Vector3 dir = diff.normalized;
    float totalDistance = diff.magnitude;
    for (float dist = maxDistance; dist < totalDistance; dist += maxSpacing ) {
        Vector3 v = p1 + dir * dist;
        //do something at position v
    }
    

    (刚刚注意到我的示例代码是用 C# 编写的,而您之前的问题是使用 JS;想必您可以找出其中的区别?)

    【讨论】:

    • 嘿 Rutter,谢谢你的回答。我尝试重写第一个块并将两个极点用作 p1 & p2 var p1 : Vector3 = currentPole1.TransformDirection(Vector3.right); var p2 : Vector3 = currentPole2.TransformDirection(Vector3.left); var numPoints : int = 9; var step : float = 1f / (numPoints+1); for (var perc : float = step; perc
    • 我还重写了第二个块 var p1 : Vector3 = currentPole1.position.x(Vector3.up); var p2 : Vector3 = currentPole2.position.x(Vector3.up); var maxSpacing : 浮点数 = 10f; var maxDistance : 浮动; var diff : Vector3 = p2 - p1; var dir : Vector3 = diff.normalized; var totalDistance : float = diff.magnitude; var dist: float = maxDistance; for(dist
    • 我这样做是为了在另外两个极点之间实例化一个极点:var point:Vector3; point.x = currentPole1.transform.position.x + 0.5*(currentPole2.transform.position.x - currentPole1.transform.position.x); point.z = currentPole1.transform.position.z + 0.5*(currentPole2.transform.position.z - currentPole1.transform.position.z); var instance = Instantiate(fencePoleSkew, point, Quaternion.identity);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    相关资源
    最近更新 更多