通過 Mathf.Clamp控制區域範圍
上下左右和WSAD 的控制
使用前提:給對象添加剛體 Componet —-> Physics —-> rigidbody
public float speed;
public float minX;
public float maxX;
public float minZ;
public float maxZ;
//這個是視角旋轉了90度的 所以移動的面是xz 這個可以根據自己的需求做對應的變化
private void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
GetComponent<Rigidbody>().velocity = movement * speed;
GetComponent<Rigidbody>().position = new Vector3(
Mathf.Clamp(GetComponent<Rigidbody>().position.x, minX, maxX),
0.0f,
Mathf.Clamp(GetComponent<Rigidbody>().position.z, minZ, maxZ)
);//空間位置進行一個限定
}
鼠標按住移動
使用前提:給對象添加碰撞盒 Componet —-> Physics —-> Box Collider
void Start()
{
StartCoroutine(OnMouseDown());
}
int minXX = 301;
int minYY = 58;
int maxXX = 654;
int maxYY = 492;
IEnumerator OnMouseDown()
{
Debug.Log("OnMouseDown");
//將物體由世界座標系轉換爲屏幕座標系
Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position);//三維物體座標轉屏幕座標
//完成兩個步驟 1.由於鼠標的座標系是2維,需要轉換成3維的世界座標系
// // 2.只有3維座標情況下才能來計算鼠標位置與物理的距離,offset即是距離
//將鼠標屏幕座標轉爲三維座標,再算出物體位置與鼠標之間的距離
Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z));
while (Input.GetMouseButton(0))
{
Debug.Log("GetMouseButton----Input.mousePosition.x y z" + Input.mousePosition.x+","+ Input.mousePosition.y+","+ Input.mousePosition.z);
//得到現在鼠標的2維座標系位置new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z);
Vector3 curScreenSpace =new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)
//將當前鼠標的2維位置轉換成3維位置,再加上鼠標的移動量
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset;
//curPosition就是物體應該的移動向量賦給transform的position屬性
transform.position = curPosition;
yield return new WaitForFixedUpdate(); //這個很重要,循環執行
}
}
兩個不衝突 可同時存在