unity2D 鼠标点击发射子弹及其自身和武器旋转的实现


最近在制作一款游戏,在这个武器及子弹旋转问题上有了点停留,在多方思考下决定使用了这个实现方法来完成这部分的制作。


武器旋转
在武器旋转上我采用随着鼠标即时旋转的方法实现,代码如下:

private void arm_rotate()
    {
        if (equipment != null)
        {
            GameObject maincamera = GameObject.FindGameObjectWithTag("MainCamera");
            Vector2 mouseposition;
            mouseposition = maincamera.GetComponent<Camera>().ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10f));
            Vector2 direction = new Vector2(mouseposition.x - GetComponent<Transform>().position.x, mouseposition.y - GetComponent<Transform>().position.y);
            float angle = Vector2.Angle(direction, Vector2.right);
            if (mouseposition.y < this.transform.position.y)
                angle = -angle;
            equipment.GetComponent<Transform>().eulerAngles = new Vector3(0, 0, angle);
        }
    }

equipment是先前定义过的GameObject对象,用来引用武器游戏对象。先用FindGameObjectWithTag方法寻找到主摄像机(也可以先public一个游戏物体,再在unity界面拖入对应的摄像机),再调用ScreenToWorldPoint方法来把鼠标的点转换为世界坐标。通过direction来记录方向,再用Vector2.Angle方法来计算旋转的夹角(需要注意的是再鼠标y轴小于物体时夹角应该为相反值)。最后通过Transform.eulerAngles方法旋转即可。


子弹旋转
在武器旋转上我采用随着鼠标即时旋转的方法实现,代码如下:

private void player_attack()
    {
            GameObject player_launcher;
            GameObject maincamera = GameObject.FindGameObjectWithTag("MainCamera");
            Vector2 mouseposition;
            mouseposition = maincamera.GetComponent<Camera>().ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10f));
            Vector2 direction = new Vector2(mouseposition.x - GetComponent<Transform>().position.x, mouseposition.y - GetComponent<Transform>().position.y);
            float angle = Vector2.Angle(direction, Vector2.right);
            if (mouseposition.y < this.transform.position.y)
                angle = -angle;
            player_launcher = Instantiate(_launcher, GameObject.FindGameObjectWithTag("shoot_point").transform.position, Quaternion.identity);
            player_launcher.GetComponent<Transform>().eulerAngles = new Vector3(0, 0, angle); 
    }

子弹的旋转大体也和上面的原理相同,注意角度的选择方向和取相反值的判断条件即可。

你可能感兴趣的:(unity游戏开发)