1:经过1天的尝试,最终还是使用Mathf.Clamp。
2:创建地形teriann.
3:镜头绑定到物体上,为物体添加碰撞盒,刚体,选择运动学。使它在碰撞后不会有力的作用。
4:在fixupdate中添加区域检测。
using System;
using System.Collections.Generic;
using UnityEngine;
using System.Collections;
using UnityEngine.Analytics;
[System.Serializable]
public class Boundary
{
public float xMin, xMax, zMin, zMax;
}
public class move : MonoBehaviour {
public int stepSize = 30;
private Vector2 touchfirst = Vector2.zero;
private Vector2 touchsecond = Vector2.zero;
public Boundary boundary;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnGUI(){
if (Event.current.type == EventType.mouseDown) {
touchfirst = Event.current.mousePosition;
}
if (Event.current.type == EventType.mouseDrag) {
touchsecond = Event.current.mousePosition;
if(touchsecond.x < touchfirst.x){
transform.Translate(new Vector3(stepSize,0,0));
// GetComponent<Rigidbody> ().transform.Translate((new Vector3(stepSize,0,0)));
}
if(touchsecond.x > touchfirst.x){
transform.Translate(new Vector3(-stepSize,0,0));
// GetComponent<Rigidbody> ().velocity = Vector3.right * 100f;
}
if(touchsecond.y < touchfirst.y){
transform.Translate(new Vector3(0,0,-stepSize));
// GetComponent<Rigidbody> ().velocity = Vector3.up * 100f;
}
if(touchsecond.y > touchfirst.y){
transform.Translate(new Vector3(0,0,stepSize));
// GetComponent<Rigidbody> ().velocity = Vector3.down * 100f;
}
touchfirst = touchsecond;
}
}
void FixedUpdate ()
{
Rigidbody rb = GetComponent<Rigidbody> ();
if (rb != null) {
rb.position = new Vector3
(
Mathf.Clamp (rb.position.x, boundary.xMin, boundary.xMax),
903.0f,
Mathf.Clamp (rb.position.z, boundary.zMin, boundary.zMax)
);
}
}
}
这个方法虽然比较不智能但至少先实现了我想要的效果,嘎嘎。下一步就是在地形周围添加盒子,省的以后地图中的啥东西会移动出去。