1. 程式人生 > >吃雞(遙杆)人物移動及相機跟隨的實現

吃雞(遙杆)人物移動及相機跟隨的實現

抽空做的一個小Demo,基本功能還是能實現的。 

1.左下遙杆控制移動

2.右下區域遙杆控制人物轉向及相機跟隨轉向

3.右上遙杆控制視野(相機角度)

懶省事,基本能省事就省事了,物體都是拖拽。 

 照著拖就行了

左下遙杆 

 /// <summary>
    /// 移動遙感協程
    /// </summary>
    /// <returns></returns>
    IEnumerator Move()
    {
        while (Input.GetMouseButton(0))
        {
            print("滑鼠落下");
            //滑鼠位置
            Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0);
            //偏移量
            Vector3 offset = mousePos - center.transform.position;
            //限制座標
            if (offset.magnitude > Range)
            {
                //偏移量=偏移量的.標準化*範圍(標準化-即使變數值得大小更改為<系統預設的標準1>)
                offset = offset.normalized * Range;
            }
            //賦值給小圓盤(搖桿)
            centerObject.transform.position = center.transform.position + offset;
            //賦值給玩家
            PlayerObject.transform.position += new Vector3(offset.x / Range, 0, offset.y / Range) * Time.deltaTime * 5;
            //設定角色的朝向(朝向當前座標+搖桿偏移量)
            // PlayerObject.transform.LookAt(new Vector3(transform.position.x + offset.x, PlayerObject.transform.position.y, PlayerObject.transform.position.z + offset.y));
            //停留一幀,避免死迴圈
            yield return null;
        }
        //搖桿回彈
        //1.使搖桿座標=圓盤座標
        centerObject.transform.position = center.transform.position;
        //2.使座標偏移量=0
        centerObject.transform.localPosition = Vector2.zero;
    }

 方向遙感

  /// <summary>
    /// 方向遙感
    /// </summary>
    /// <returns></returns>
    IEnumerator FX()
    {
        fxoffset = Camera.main.transform.localEulerAngles - transform.localEulerAngles;
        while (true)
        {
            if(Input.GetMouseButton(0))
            {
                zx = true;
                pos1 = Input.mousePosition;
                if (pos2!=Vector3.zero)
             {
                    
                   
                    transform.localEulerAngles += new Vector3(0,pos2.x - pos1.x, 0)*0.5f;
                    Camera.main.transform.RotateAround(new Vector3(transform.position.x, Camera.main.transform.position.y, transform.position.z), Vector3.down, (pos1.x - pos2.x)*0.5f);

                   
                }
               
                pos2 = Input.mousePosition;
                
            }
            
            if(Input.GetMouseButtonUp(0))
            {
                offset = Camera.main.transform.position - transform.position;
                pos2 = Vector3.zero;
                zx = false;
            }
            yield return null;
        }
        


    }

視野遙感


 /// <summary>
    /// 視野遙感協程
    /// </summary>
    /// <returns></returns>
    IEnumerator SYYG()
    {
        rot = Camera.main.transform.localEulerAngles;
        pos = Camera.main.transform.position;
        while (Input.GetMouseButton(0))
        {
            sy = true;
            print("滑鼠落下");
            //滑鼠位置
            Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0);
            //偏移量
            Vector3 offset = mousePos - ShiYe.transform.position;
            //限制座標
            if (offset.magnitude > Range)
            {
                //偏移量=偏移量的.標準化*範圍(標準化-即使變數值得大小更改為<系統預設的標準1>)
                offset = offset.normalized * Range;
            }
            //賦值給小圓盤(搖桿)
            SY.transform.position = ShiYe.transform.position + offset;
            //賦值給玩家
            // PlayerObject.transform.position += new Vector3(offset.x / Range, 0, offset.y / Range) * Time.deltaTime * 5;

            Camera.main.transform.localEulerAngles += new Vector3(-offset.y / Range, offset.x / Range, 0) * Time.deltaTime * 30;

            //需要限制下視野範圍

            yield return null;
        }
        if (Input.GetMouseButtonUp(0))
        {
            sy = false;
            Camera.main.transform.localEulerAngles = rot;
            Camera.main.transform.position = pos;


        }
        //搖桿回彈
        //1.使搖桿座標=圓盤座標
        SY.transform.position = ShiYe.transform.position;
        //2.使座標偏移量=0
        SY.transform.localPosition = Vector2.zero;
    }
}