3-6中鼠標點擊目的地使角色移動中,WalkOn()是怎么寫的啊
UpDate()和LateUpDate()都沒有對WalkOn()更新的代碼,難道寫在FixedUpDate()里嗎?呃,我的意思是,鍵盤那里是每幀更新該幀的位置,而鼠標這個是點一次之后很多幀都重復執行同一種更新直到到達目的地,也就是怎么寫能簡單到“類似的代碼”
UpDate()和LateUpDate()都沒有對WalkOn()更新的代碼,難道寫在FixedUpDate()里嗎?呃,我的意思是,鍵盤那里是每幀更新該幀的位置,而鼠標這個是點一次之后很多幀都重復執行同一種更新直到到達目的地,也就是怎么寫能簡單到“類似的代碼”
2017-03-02
舉報
2017-12-09
我的實現思路是這樣的,保存一個目標位置,然后每一幀都向目標位置按一定速度移動。
具體代碼這樣子。
private?Vector3?_targetPosition; public?float?Speed; void?Update() { ????Vector3?dist?=?_targetPosition?-?transform.position;?//?計算從當前位置到目標位置的向量 ????dist.y?=?0;?//?只在平面上移動,去除高度差。 ????Vector3?velocity?=?dist.normalized?*?Time.deltaTime?*?Speed;?//?本次移動的向量 ????if(dist.magnitude?<?velocity.magnitude)?//?如果這一次移動就會抵達目標位置,則直接使用當前位置到目標位置的向量作為移動向量 ????{ ????????velocity?=?dist; ????} ????if(velocity?!=?Vector3.zero)?//?如果還沒移動到目的地則進行這次移動 ????{ ????????transform.Translate(dist); ????} } void?MoveTo(Vector3?pos) { ????_targetPosition?=?pos; }因為Vector3 是值類型,所以不能通過判 null 來處理移動和不移動的狀態,可以通過再加個 成員變量 _needMove 來避免每一幀都計算一次位移,這里懶得寫了。