如何使台球杆围绕母球旋转?

时间:2019-07-16 13:45:18

标签: c# unity3d game-physics

我希望当玩家拖动鼠标时,台球杆绕着母球旋转。我已经在互联网上玩过一些台球游戏,它们似乎都以这种方式工作。这最终将是一个浏览器游戏。

该游戏不是我的游戏,但它具有我想要的基本机制(我不在乎显示的行,我只想旋转并点击机制)https://www.crazygames.com/game/8-ball-billiards-classic

到目前为止,我已经尝试了一些绕行脚本,但没有一个起作用。

我已经尝试了一些脚本,这些脚本根据希望使对象绕轨道旋转的方式来实现,从而使其通过鼠标拖动而不是时间绕轨道旋转。我也无法不断面对母球。

这段代码使我最接近了。

public int vertexCount = 40;
    public float lineWidth = 0.2f;
    public float radius;
    public bool circleFillscreen;
    //circle variables
    static float timeCounter = 0;
    float width;
    float height;

    private LineRenderer lineRenderer;

    private void Awake()
    {
        lineRenderer = GetComponent<LineRenderer>();
        SetupCircle();
    }

    void Update()
    {

        timeCounter += Time.deltaTime;

        float x = Mathf.Cos(timeCounter);
        float y = 0;
        float z = Mathf.Sin(timeCounter);



    }



    private void SetupCircle()
    {
        lineRenderer.widthMultiplier = lineWidth;

        if (circleFillscreen)
        {
            radius = Vector3.Distance(Camera.main.ScreenToWorldPoint(new Vector3(0f, Camera.main.pixelRect.yMax, 0f)),
                Camera.main.ScreenToWorldPoint(new Vector3(0f, Camera.main.pixelRect.yMin, 0f))) * 0.5f - lineWidth;
        }

        float deltaTheta = (2f * Mathf.PI) / vertexCount;
        float theta = 0F;

        lineRenderer.positionCount = -vertexCount;
        for (int i = 0; i < lineRenderer.positionCount; i++)
        {
            Vector3 pos = new Vector3(radius * Mathf.Cos(theta), radius * Mathf.Sin(theta), 0f);
            lineRenderer.SetPosition(i, pos);
            theta += deltaTheta;

        }



    }

#if UNITY_EDITOR
    private void OnDrawGizmos()
    {
        float deltaTheta = (2f * Mathf.PI) / vertexCount;
        float theta = 0f;

        Vector3 oldPos = Vector3.zero; 
        for (int i = 0; i < vertexCount + 1; i++)
        {
            Vector3 pos = new Vector3(radius * Mathf.Cos(theta), 0F,radius * Mathf.Sin(theta));
            Gizmos.DrawLine(oldPos, transform.position + pos);
            oldPos = transform.position + pos;

            theta += deltaTheta;

        }

    }
#endif

}

并没有真正收到任何错误消息,代码“有效”但无效。

0 个答案:

没有答案