您好,登錄后才能下訂單哦!
這兩天一直在做一個漫游的東西,漫游的代碼,網上各種各樣,都有,但是在漫游的過程中出現一個問題,那就是碰到墻壁之后會穿墻,或者是會反彈,攝像機一直在抖動,這樣看起來很不爽,
漫游的程序就不多少了,有好多,我這用了兩種:
1.采用滑動的偏移量來控制移動,這包括三種,
第一一種是鼠標的Input.GetMouseButtonDown(0)和Input.GetMouseButton(0)計算偏移量;
第二種就是使用虛擬軸
float offetX = Input.GetAxis("Mouse X");//左右滑動
float offetY = Input.GetAxis("Mouse Y");//上下滑動
來控制移動和旋轉;
第三種,采用就是移動平臺下的手指滑動,這個也有好多,也可以用
這個可以看一看宣雨松的博客,講的很詳細,http://www.xuanyusong.com/archives/1869
也可以用Input.GetTouch(0)手指滑動;
總之一句話就是用的偏差量來控制移動和旋轉;
2.防止攝像機穿墻:
相碰的兩個物體都要添加Collider,運動的那個物體定要加剛體(給攝像機加一個Capsule子對象,將Collider和Rigidbody加載Capsule的父對象身上),但是防止穿墻就得靠Rigidbody組件的Constraints屬性了,分別有Freeze Position(x,y,z)和Freeze Rotation(x,y,z);固定位置和角度,Freeze Rotation(x,y,z)勾上哪一個軸,碰撞之后不超哪一個軸旋轉,Freeze Position(x,y,z)控制位置,防止穿墻,x和z軸不能勾,這樣碰撞之后就不會穿墻。
3.防止碰撞反彈
這個也不是很難,就是想不到這個問題出在哪,你看了之后就會明白,其實作為剛體,gameObject運動之后,rigidbody.velocity的值是不為Vector(0,0,0),作為剛體,碰撞后本來就會反彈,因而會一直在動,朝著反彈的方向,所以很鬧心,但是我們可以將rigidbody.velocity歸0,沒有速度了就不會反彈了,因為是物理特性的,所以不要寫在Update中,
void FixedUpdate()
{
this.GetComponent<Rigidbody>().rigidbody.velocity = new Vector3(0, 0, 0);
}
這就完美的解決了,如果有問題,提出來我們繼續討論
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。