unity2D開發鉤繩槍效果(2D射線檢測 鉸鏈關節 Linerenderer組件的使用)

這幾天我突發奇想 想要實現一個2D的鉤繩槍
但是實現過程可以說是十分坎坷了 遇到了好多意料之外的問題

然後這篇博客 給大家介紹一下遇到的坑 以及我對於鉤繩槍的想法
首先 我想到的是在玩家本身發射2D的射線 方向朝着鼠標的方向
這就是一個困擾我很久的 一個問題
因爲座標系的不同
2D射線和3D的用法幾乎不同 所以花了一段時間
Physics2D.Raycast(發射位置, 發射方向,距離);
這個很大程度的區別於3D的用法

還有就是大家也可能遇到2D射線檢測不到的情況
這個問題很大可能是座標的原因 座標的z軸必須爲0
如果不爲0 當然會檢測不到

解決了這個問題 然後就是鼠標方向的問題了
我看了很多大佬的博客 很多都不能用 最後終於研究出來了
其實思路非常非常簡單的 就是用轉換後的2D鼠標座標 和主角座標作差
即可得到方向(是有大小的) 然後單位化

下面我給出代碼

 private Vector3 targetpos;
    private LineRenderer linerenderer;
    private void Start()
    {
        linerenderer = GetComponent<LineRenderer>();
    }
    void Update()
    {
        if (Input.GetMouseButton(0))
        {        
             Vector3 mouse = Input.mousePosition;
            Vector3 obj = Camera.main.WorldToScreenPoint(transform.position);
            //屏幕座標向量相減,得到指向鼠標點的目標向量,即黃色線段
             Vector3 direction = mouse - obj;
             //將Z軸置0,保持在2D平面內
             direction.z = 0f;
            //將目標向量長度變成1,即單位向量,這裏的目的是隻使用向量的方向,不需要長度,所以變成1
             direction = direction.normalized;
            transform.up = direction;
            RaycastHit2D hit = Physics2D.Raycast(transform.position+new Vector3(0,0.1f,0), direction);
            if (hit.collider.tag=="Upwall"&&hit.collider!=null)
            {
                targetpos = hit.point;
                Debug.LogError("meicuo ");
            }
            linerenderer.SetPosition(0, transform.position);
            linerenderer.SetPosition(1, targetpos );
        }
        else if (Input.GetMouseButtonUp(0))
        {
            linerenderer.SetPosition(0, transform.position);
            linerenderer.SetPosition(1, transform.position);
        }
    }

我在unity中做了一個牆 標籤(tag)爲Upwall 可以被繩子勾住

效果圖(我用之前的超級瑪麗項目來做的 純屬因爲懶 懶得再去寫一遍角色控制器等了)這堵牆的標籤就是Upwall

在這裏插入圖片描述

然後我的想法就是利用鉸鏈關節來控制角色的移動 我們讓角色勾住牆壁之後 可以類似盪鞦韆一樣 蕩過跳躍不過的溝壑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章