日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Unity实践笔记] 俯视视角人物360°移动脚本

發布時間:2023/12/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Unity实践笔记] 俯视视角人物360°移动脚本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實現效果

俯視視角下,wasd控制人物移動,人物可進行360°流暢轉身。

知識點

角度計算:繞y軸軟轉到direction方向需要轉多少度

float angle = Vector3.Angle(new Vector3(0, 1, 0), direction);

?

局部坐標系中旋轉(0, 0 , angle)

transform.localEulerAngles = new Vector3(0, 0, angle);

?
不使用transform.Rotate(vec3)的原因
Rotate(vec3)為旋轉vec3角度(相對角度),只要按鍵按下左右鍵就會執行,會達到令人凌亂的效果。
localEulerAngles(vec3)為旋轉到vec3角度(絕對角度),如果已經到達該角度,再怎么按左右鍵都不會過度旋轉。
?

代碼

  • 掛載在玩家Object
  • // Attached on playerObj public class PlayerController : MonoBehaviour {public float speed = 1.0f;public Animator anim;private void Start(){anim = GetComponentInChildren<Animator>();}void FixedUpdate(){float xPosition = Input.GetAxis("Horizontal") * speed;float yPosition = Input.GetAxis("Vertical") * speed;if (Input.GetKey("a")||Input.GetKey("d")||Input.GetKey("w")||Input.GetKey("s")){transform.Translate(xPosition, yPosition, 0);//animator.SetBool("isWalking", true);}anim.SetFloat("speed", Mathf.Abs(xPosition)+Mathf.Abs(yPosition));//else animator.SetBool("isWalking", false);}

    此腳本只負責移動玩家Object,不管玩家如何旋轉。

    注意:若帶有RigidBody組件,必須使用FixedUpdate(),否則會解鎖奇奇怪怪的移動方式。
    ?

  • 掛載在玩家Object子物體,sprite上(帶有玩家sprite和animator)
  • // Attached on player-spriteObj public class SpriteSpinner : MonoBehaviour {SpriteRenderer spriteRenderer;Vector3 direction;bool moveV;bool moveH;// Start is called before the first frame updatevoid Start(){spriteRenderer = GetComponent<SpriteRenderer>();}// Update is called once per framevoid Update(){direction.x = Input.GetAxis("Horizontal");direction.y = Input.GetAxis("Vertical");if(direction.x == 0 && direction.y != 0){moveV = true;moveH = false;}else if(direction.y == 0 && direction.x != 0){moveH = true;moveV = false;}else{moveH = false;moveV = false;}if(moveV){int rotateY = direction.y > 0 ? 0 : 180;transform.localEulerAngles = new Vector3(0, 0, rotateY);}else if(moveH){int rotateX = direction.x > 0 ? -90 : 90;transform.localEulerAngles = new Vector3(0, 0, rotateX);}else{int signX = direction.x < 0 ? 1 : -1;float angle = signX * Vector3.Angle(new Vector3(0, 1, 0), direction);if(angle != 0) transform.localEulerAngles = new Vector3(0, 0, angle);}} }

    此腳本只負責旋轉玩家帶有sprite組件的子物體(即子物體的旋轉不會影響玩家整體的移動方向)
    ?

    Bug & 待修改

    停止控制后會自動旋轉一定角度

    總結

    以上是生活随笔為你收集整理的[Unity实践笔记] 俯视视角人物360°移动脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。