Unity3d 生成一个BoxCollizer2D到Vector3

Unity3d 生成一个BoxCollizer2D到Vector3,unity3d,unityscript,Unity3d,Unityscript,我正在制作一个游戏,在这个游戏中,用户将使用input.touch绘制一条线(使该部分工作)。我想让一个BoxCollider2D以正确的旋转方向在线段的中心生成,以与直线匹配 我想我可以知道如何在线段的中心繁殖,但我不明白的是在正确的旋转方向繁殖 以下是我用来制定核心功能的测试脚本: #pragma strict var lastDotPosition : Vector3; var lastPointExists : boolean = false; var c1 : Color = Col

我正在制作一个游戏,在这个游戏中,用户将使用
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;
        }
    }
}
#pragma strict
变量lastDotPosition:Vector3;
var lastPointExists:boolean=false;
变量c1:颜色=颜色。黄色;
变量c2:Color=Color.red;
变量lengthoflinerder:int=2;
函数Start(){
var lineRenderer:lineRenderer=gameObject.AddComponent.();
lineRenderer.material=新材质(Shader.Find(“粒子/添加剂”);
lineRenderer.SetColors(c1、c2);
lineRenderer.SetWidth(0.01,0.01);
lineRenderer.SetVertexCount(LengthoFlinderer);
}
函数更新()
{
if(输入。GetMouseButton(0))
{
var lineRenderer:GameObject=newgameobject(“行”);
lineRenderer.AddComponent.();
var newLine:LineRenderer=LineRenderer.GetComponent.();
换行。设置颜色(c1,c2);
换行。设置宽度(0.1,0.1);
换行符.SetVertexCount(lengthoflinerder);
变量鼠标:Vector2=Camera.main.ScreenToWorldPoint(Input.mousePosition);
var mouseRay:Ray2D=新的Ray2D(鼠标,矢量2.0);
var newDotPosition:Vector2=mouseRay.origin;
lineRenderer.AddComponent.();
var newCol:BoxCollider2D=lineRenderer.GetComponent.();
if(newDotPosition!=lastDotPosition)
{
变量位置:Vector3=Vector3(lastDotPosition.x,lastDotPosition.y,0);
换行。设置位置(0,位置);
变量pos2:Vector3=Vector3(newDotPosition.x,newDotPosition.y,0);
换行。设置位置(1,位置2);
newCol.size=Vector2(1,1);
变量colAngle:float=Vector3.Dot(pos,pos2);
colAngle=colAngle/(位置大小*位置2大小);
colAngle=Mathf.Acos(colAngle);
colAngle=colAngle*180/Mathf.PI;
Log(“Col angle:+colAngle”);
lineRenderer.transform.Rotate(Vector3(0,0,colAngle+17.28));
Log(“旋转:“+lineRenderer.transform.Rotation.z”);
lastDotPosition=newDotPosition;
}
}
}

我知道了如何计算表示线段端点的两个向量之间的角度<代码>位置(起点)和
位置2
(终点)。我不明白的是让游戏物体/对撞机旋转到那种程度。两个向量之间的角度是var
colAngle
。请告诉我角度计算是否正确。如果是,那么我应该如何使
框碰撞R2D
旋转到正确的旋转方向

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