吃雞(遙杆)人物移動及相機跟隨的實現
阿新 • • 發佈:2018-12-17
抽空做的一個小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; } }