Unity3d 如何在unity中绘制如下游戏参考的轨迹

Unity3d 如何在unity中绘制如下游戏参考的轨迹,unity3d,draw,game-physics,Unity3d,Draw,Game Physics,我想用触摸输入创建球瞄准预览路径,我尝试了一下,只创建了一个方向,但我想用3种类型的圆弧创建。 目标和原点位置是固定的,但改变弧曲线路径的改变取决于控制 如果用户向右滑动,则使用圆弧和右侧x=10的圆弧曲线绘制到目标的路径原点 如果用户向左滑动,则使用圆弧绘制到目标的路径原点,并使用左侧x=-10绘制到目标的圆弧曲线 如果用户位于中心,则使用圆弧和X=0的圆弧曲线绘制到目标的路径原点 void Update() { if (Application.isMobilePlatform)

我想用触摸输入创建球瞄准预览路径,我尝试了一下,只创建了一个方向,但我想用3种类型的圆弧创建。

目标和原点位置是固定的,但改变弧曲线路径的改变取决于控制

  • 如果用户向右滑动,则使用圆弧和右侧x=10的圆弧曲线绘制到目标的路径原点

  • 如果用户向左滑动,则使用圆弧绘制到目标的路径原点,并使用左侧x=-10绘制到目标的圆弧曲线

  • 如果用户位于中心,则使用圆弧和X=0的圆弧曲线绘制到目标的路径原点

    void Update()
    {
        if (Application.isMobilePlatform)
        {
            // If pressed with one finger
            if (Input.GetMouseButtonDown(0))
            {                            
                pressX = Input.touches[0].position.x;
                pressY = Input.touches[0].position.y;
            }
            else if (Input.GetMouseButtonUp(0))
            {
                pressX = 0;
                pressY = 0;
            }
    
    
            if (pressX != 0)
            {
                float currentX = Input.touches[0].position.x;
    
                if (currentX < pressX)
                    XValue = (currentX - pressX) / 100;
                else if (currentX > pressX)
                    XValue = (currentX - pressX) / 100; 
    
                if (target.transform.position.y < 45.0f)
                {
    
                    TargetPosition = target.transform.position;
                    print("YValue : " + YValue);
                    TargetPosition.x += XValue;
                    TargetPosition.y += YValue;
                    target.transform.position = TargetPosition;
                }
                else
                {
                    TargetPosition = target.transform.position;
                    print("YValue : " + YValue);
                    TargetPosition.x += XValue;
                    TargetPosition.y += YValue;
                    if (target.transform.position.y > 45.0f)
                        TargetPosition.y = 45;
                    target.transform.position = TargetPosition;
                }
    
                DrawPath();
            }
            if (pressY != 0)
            {
                float currentY = Input.mousePosition.y;
    
                if (currentY < pressY)
                    YValue = (currentY - pressY) / 100;
                else if (currentY > pressY)
                    YValue = (currentY - pressY) / 100;
    
                if (target.transform.position.y < 45.0f)
                {
    
                    TargetPosition = target.transform.position;
                    print("YValue : " + YValue);
                    TargetPosition.x += XValue;
                    TargetPosition.y += YValue;
                    target.transform.position = TargetPosition;
                }
                else
                {
                    TargetPosition = target.transform.position;
                    print("YValue : " + YValue);
                    TargetPosition.x += XValue;
                    TargetPosition.y += YValue;
                    if (target.transform.position.y > 45.0f)
                        TargetPosition.y = 45;
                    target.transform.position = TargetPosition;
                }
    
                DrawPath();
            }
        }
        else
        {
            if (Input.GetMouseButtonDown(0))
            {
                pressX = Input.mousePosition.x;
                pressY = Input.mousePosition.y;
            }
            else if (Input.GetMouseButtonUp(0))
                pressX = 0;
    
    
            if (pressX != 0)
            {
                float currentX = Input.mousePosition.x;
                float currentY = Input.mousePosition.y;
    
                if (currentX < pressX)
                    XValue = (currentX - pressX) / 100;
                else if (currentX > pressX)
                    XValue = (currentX - pressX) / 100;
    
                if (currentY < pressY)
                    YValue = (currentY - pressY) / 100;
                else if (currentY > pressY)
                    YValue = (currentY - pressY) / 100;
    
    
                if (target.transform.position.y < 45.0f )
                {
    
                    TargetPosition = target.transform.position;
                    print("YValue : " + YValue);
                    TargetPosition.x += XValue;
                    TargetPosition.y += YValue;
                    target.transform.position = TargetPosition;
                    //target.transform.position = new Vector3(target.transform.position.x, target.transform.position.y + YValue, target.transform.position.z);
                }
                else
                {
                    TargetPosition = target.transform.position;
                    print("YValue : " + YValue);
                    TargetPosition.x += XValue;
                    TargetPosition.y += YValue;
                    if (target.transform.position.y > 45.0f)
                        TargetPosition.y = 45;
                    target.transform.position = TargetPosition;
                }
    
                DrawPath();
            }
            else
            {
    
            }
        }
    
        if (Input.GetMouseButtonUp(0))
        {
            print("Mouse Click Call");
            //Rigidbody obj = Instantiate(ball, transform.position, Quaternion.identity);
    
            //obj.velocity = Vo;
            ball.position = transform.position;
            Physics.gravity = Vector3.up * gravity;
            ball.useGravity = true;
            ball.velocity = CalculateLaunchData().initialVelocity;
        }     
    }
    
    void Update()
    {
    if(Application.isMobilePlatform)
    {
    //如果用一个手指按
    if(Input.GetMouseButtonDown(0))
    {                            
    按x=输入。触摸[0]。位置.x;
    按y=输入。触摸[0]。位置。y;
    }
    else if(Input.GetMouseButtonUp(0))
    {
    按X=0;
    pressY=0;
    }
    如果(按X!=0)
    {
    float currentX=输入。触摸[0]。位置.x;
    如果(当前X<按X)
    XValue=(当前x-按x)/100;
    否则如果(当前X>按X)
    XValue=(当前x-按x)/100;
    if(目标变换位置y<45.0f)
    {
    TargetPosition=target.transform.position;
    打印(“YValue:+YValue”);
    TargetPosition.x+=XValue;
    TargetPosition.y+=YValue;
    target.transform.position=TargetPosition;
    }
    其他的
    {
    TargetPosition=target.transform.position;
    打印(“YValue:+YValue”);
    TargetPosition.x+=XValue;
    TargetPosition.y+=YValue;
    如果(目标变换位置y>45.0f)
    目标位置y=45;
    target.transform.position=TargetPosition;
    }
    绘图路径();
    }
    如果(按!=0)
    {
    float currency y=Input.mousePosition.y;
    如果(当前Y<压力)
    Y值=(当前Y-压力)/100;
    否则如果(当前Y>按Y)
    Y值=(当前Y-压力)/100;
    if(目标变换位置y<45.0f)
    {
    TargetPosition=target.transform.position;
    打印(“YValue:+YValue”);
    TargetPosition.x+=XValue;
    TargetPosition.y+=YValue;
    target.transform.position=TargetPosition;
    }
    其他的
    {
    TargetPosition=target.transform.position;
    打印(“YValue:+YValue”);
    TargetPosition.x+=XValue;
    TargetPosition.y+=YValue;
    如果(目标变换位置y>45.0f)
    目标位置y=45;
    target.transform.position=TargetPosition;
    }
    绘图路径();
    }
    }
    其他的
    {
    if(Input.GetMouseButtonDown(0))
    {
    按x=Input.mousePosition.x;
    pressY=Input.mousePosition.y;
    }
    else if(Input.GetMouseButtonUp(0))
    按X=0;
    如果(按X!=0)
    {
    float currentX=输入.mousePosition.x;
    float currency y=Input.mousePosition.y;
    如果(当前X<按X)
    XValue=(当前x-按x)/100;
    否则如果(当前X>按X)
    XValue=(当前x-按x)/100;
    如果(当前Y<压力)
    Y值=(当前Y-压力)/100;
    否则如果(当前Y>按Y)
    Y值=(当前Y-压力)/100;
    if(目标变换位置y<45.0f)
    {
    TargetPosition=target.transform.position;
    打印(“YValue:+YValue”);
    TargetPosition.x+=XValue;
    TargetPosition.y+=YValue;
    target.transform.position=TargetPosition;
    //target.transform.position=新矢量3(target.transform.position.x,target.transform.position.y+YValue,target.transform.position.z);
    }
    其他的
    {
    TargetPosition=target.transform.position;
    打印(“YValue:+YValue”);
    TargetPosition.x+=XValue;
    TargetPosition.y+=YValue;
    如果(目标变换位置y>45.0f)
    目标位置y=45;
    target.transform.position=TargetPosition;
    }
    绘图路径();
    }
    其他的
    {
    }
    }
    if(Input.GetMouseButtonUp(0))
    {
    打印(“鼠标点击调用”);
    //刚体obj=实例化(球,transform.position,Quaternion.identity);
    //obj.速度=Vo;
    ball.position=transform.position;
    Physics.gravity=Vector3.up*重力;
    ball.useGravity=true;
    ball.velocity=CalculateLanchData().initialVelocity;
    }     
    }
    
  • 我创造了如下:


    我想:

    我想你可以用一个 其中,p0和p2是起点和终点,p1是p0和p2之间的一半,加上x值