Unity第三人稱相機碰撞處理

相關場景布置:

一:

image.png

上圖中的物體是一個空物體,位置和player的位置是一致的意荤!

二:
image.png

相機是上圖空物體是子物體!

   private void LateUpdate()
    {
        CameraHit();
    }
   Vector3 oringinalPos = new Vector3(0, 1.2f, -8);//相機的局部坐標
   void CameraHit()
    {
        RaycastHit hit;
        //從player的位置到相機位置加1長度單位的位置發(fā)射射線只锻,碰撞到就進入
        if (Physics.Linecast(player.position + Vector3.up, cameraTran.position+ (-cameraTran.forward.normalized), out hit))
        {
            if (!hit.collider.gameObject.CompareTag(ConstantScript.strCameraTag))
            {
                //如果射線碰撞的不是相機玖像,那么就取得射線碰撞點到玩家的距離
                float currentDistance = Vector3.Distance(hit.point, player.position);
                //如果射線碰撞點小于玩家與相機本來的距離,就說明角色身后是有東西齐饮,為了避免穿墻捐寥,就把相機拉近
                if (currentDistance < 8)
                {
                    Vector3 offsetTemp = cameraTran.parent.InverseTransformPoint(hit.point) - cameraTran.localPosition;
                    cameraTran.localPosition += offsetTemp * fSmoothSpeed * Time.deltaTime;
                }
            }
        }
        else//如果沒有碰撞笤昨,且相機和player的距離小于8,則移回原來的wei'zhi
        {
            if (Vector3.Distance(player.position, cameraTran.position) < 8)
            {
                Vector3 offsetTemp = oringinalPos - cameraTran.localPosition;
                cameraTran.localPosition += offsetTemp * fSmoothSpeed * Time.deltaTime;
                if (Vector3.Distance(cameraTran.position, new Vector3(0, 1.2f, -8)) < 0.5f)
                {
                    cameraTran.localPosition = oringinalPos;
                }
            }
        }

        //攝像機跟隨player與player保持相對位置偏移 (不重要握恳,和碰撞無關)
        transform.position = offsetPosition + player.position;
    }

關鍵函數(shù):

Physics.Linecast()咬腋;
示例中所用的重載為:
public static bool Linecast(Vector3 start, Vector3 end, out RaycastHit hitInfo);
start:射線的起點; end:射線的終點 睡互; hitinfo:射線返回的信息
返回值:bool根竿,表示是否有碰撞;

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末就珠,一起剝皮案震驚了整個濱河市寇壳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妻怎,老刑警劉巖壳炎,帶你破解...
    沈念sama閱讀 211,496評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逼侦,居然都是意外死亡匿辩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評論 3 385
  • 文/潘曉璐 我一進店門榛丢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铲球,“玉大人,你說我怎么就攤上這事晰赞〖诓。” “怎么了?”我有些...
    開封第一講書人閱讀 157,091評論 0 348
  • 文/不壞的土叔 我叫張陵掖鱼,是天一觀的道長然走。 經(jīng)常有香客問我,道長戏挡,這世上最難降的妖魔是什么芍瑞? 我笑而不...
    開封第一講書人閱讀 56,458評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮褐墅,結(jié)果婚禮上拆檬,老公的妹妹穿的比我還像新娘。我一直安慰自己掌栅,他們只是感情好秩仆,可當我...
    茶點故事閱讀 65,542評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著猾封,像睡著了一般澄耍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,802評論 1 290
  • 那天齐莲,我揣著相機與錄音痢站,去河邊找鬼。 笑死选酗,一個胖子當著我的面吹牛阵难,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芒填,決...
    沈念sama閱讀 38,945評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼呜叫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了殿衰?” 一聲冷哼從身側(cè)響起朱庆,我...
    開封第一講書人閱讀 37,709評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闷祥,沒想到半個月后娱颊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,158評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡凯砍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,502評論 2 327
  • 正文 我和宋清朗相戀三年箱硕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悟衩。...
    茶點故事閱讀 38,637評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡剧罩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出局待,到底是詐尸還是另有隱情斑响,我是刑警寧澤,帶...
    沈念sama閱讀 34,300評論 4 329
  • 正文 年R本政府宣布钳榨,位于F島的核電站,受9級特大地震影響纽门,放射性物質(zhì)發(fā)生泄漏薛耻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,911評論 3 313
  • 文/蒙蒙 一赏陵、第九天 我趴在偏房一處隱蔽的房頂上張望饼齿。 院中可真熱鬧,春花似錦蝙搔、人聲如沸缕溉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽证鸥。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枉层,已是汗流浹背泉褐。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸟蜡,地道東北人膜赃。 一個月前我還...
    沈念sama閱讀 46,344評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像揉忘,于是被迫代替她去往敵國和親跳座。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,500評論 2 348

推薦閱讀更多精彩內(nèi)容