在Vector3s之间产生BoxCollider2D

时间:2015-03-12 22:44:41

标签: unity3d unityscript

我正在开发一款游戏,用户可以使用input.touch绘制一条线(使该部分正常工作)。我想要发生的是让BoxCollider2D以正确的旋转在线段的中心产生以匹配线。

我想我可以弄清楚如何在线段的中心产生它,但我不明白的是以正确的旋转产生它。

以下是我用来计算核心功能的测试脚本:

#pragma strict
var lastDotPosition : Vector3;
var lastPointExists : boolean = false;

var c1 : Color = Color.yellow;
var c2 : Color = Color.red;
var lengthOfLineRenderer : int = 2;

function Start() {
     var lineRenderer : LineRenderer = gameObject.AddComponent.<LineRenderer>();
     lineRenderer.material = new Material (Shader.Find("Particles/Additive"));
     lineRenderer.SetColors(c1, c2);
     lineRenderer.SetWidth(0.01,0.01);
     lineRenderer.SetVertexCount(lengthOfLineRenderer);
}

function Update()
{
    if (Input.GetMouseButton(0))
    {
        var lineRenderer : GameObject = new GameObject("Line");
        lineRenderer.AddComponent.<LineRenderer>();
        var newLine : LineRenderer = lineRenderer.GetComponent.<LineRenderer>();
        newLine.SetColors(c1, c2);
        newLine.SetWidth(0.1,0.1);
        newLine.SetVertexCount(lengthOfLineRenderer);

        var mouse : Vector2 = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        var mouseRay : Ray2D = new Ray2D(mouse, Vector2.zero);
        var newDotPosition : Vector2 = mouseRay.origin;

        lineRenderer.AddComponent.<BoxCollider2D>();
        var newCol : BoxCollider2D = lineRenderer.GetComponent.<BoxCollider2D>();

        if (newDotPosition != lastDotPosition)
        {
            var pos : Vector3 = Vector3(lastDotPosition.x,lastDotPosition.y, 0);
            newLine.SetPosition(0, pos);
            var pos2 : Vector3 = Vector3(newDotPosition.x, newDotPosition.y, 0);
            newLine.SetPosition(1, pos2);
            newCol.size = Vector2(1, .1);
            var colAngle : float = Vector3.Dot(pos,pos2);
            colAngle = colAngle/(pos.magnitude*pos2.magnitude);
            colAngle = Mathf.Acos(colAngle);
            colAngle = colAngle*180/Mathf.PI;
            Debug.Log("Col angle: " + colAngle);
            lineRenderer.transform.Rotate(Vector3(0, 0, colAngle+17.28));
            Debug.Log("Rotation: " + lineRenderer.transform.rotation.z);
            lastDotPosition = newDotPosition;
        }
    }
}

我想出了如何计算代表线段端点的两个矢量之间的角度; pos(点开始)和pos2(点结束)。我没有得到的是让游戏对象/对撞机旋转到那个程度。两个向量之间的角度是var colAngle。如果我正确计算角度,请告诉我。如果是,那我该如何让BoxCollider2D旋转到正确的旋转?

要测试它,只需将此脚本附加到新的空游戏对象并运行它。

0 个答案:

没有答案