本文利用剛體實現玩家的移動,使用剛體移動可以產生與其他剛體碰撞立即停止,防止抖動。
1.給角色創建剛體和碰撞體
選中咱們的角色
Add Component -> Physics 2D -> Box Collider 2D和Rigidbody 2D
Box Collider 2D:碰撞體,可以用來進行物體間的碰撞檢測;
Rigidbody 2D:剛體,用來模擬物理引擎。
2.調整碰撞體大小
選擇我們角色的碰撞體,然后點擊Edit Collider,即可在場景中設置我們的碰撞體大小。
如果想要獲得比較好的立體感,可以將碰撞體設置到腳底,這樣我們的角色路過障礙物的時候就像是在障礙物的前方。
3.調整剛體屬性
因為這里的角色移動是在平面上的,不是橫版闖關的那種形式,因此需要調整剛體的屬性:
Angluar Drag:角阻力為0;
Gravity Scale:重力為0,不然會掉落到屏幕外;
Constraints->Freeze Rotation:Z打上勾,防止因為物體碰撞發生翻轉。
4.創建移動腳本MovementController
可以專門創建一個Player的文件夾,像此類操作玩家角色的腳本都放入其中。
在相應的文件夾中右鍵,Create -> C# Script
創建MovementController腳本并打開:
5.腳本內容
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MovementController : MonoBehaviour
{
public Rigidbody2D rBody;
public float speed = 1;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private void FixedUpdate()
{
Vector2 movement = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
Vector2 targetPos = rBody.position + movement * Time.deltaTime * speed;
rBody.MovePosition(targetPos);
}
}
public Rigidbody2D rBody:這里公開一個剛體是為了告訴使用該腳本的開發者,我們這個角色需要創建一個剛體,這樣就可以防止開發者忘記給角色添加一個剛體;
如果腳本是自己使用,可以rBody = GetComponent<Rigidbody2D>()來獲取角色的剛體;
public float speed = 1:添加一個默認的移動速度,公開之后可以在屬性面板直接調試;
將移動方法放入到FixedUpdate()中,這樣我們角色的移動會更加順暢;
Input.GetAxisRaw("****"):該方法獲取方向上的輸入,相當于按住鍵盤的方向鍵或者WSAD鍵;
Vector2 targetPos = rBody.position + movement * Time.deltaTime * speed:將角色每一幀的移動向量計算出來;
rBody.MovePosition(targetPos):剛體移動的方法。
6.使用腳本
將我們創建的腳本掛在到角色身上,并完成賦值,即可完成角色移動: