Unity C#  2D弓箭效果_拉弓(一)

 

  • 此篇重點 * * * * *

 本篇重點在於使用Unity Engine中所提供的 "Line Render" 來呈現拉弓效果
由於"Line Render"的效果比較不常用到,所以在本篇的教學中會分解成比較多的
步驟來進行解釋。

 

  • 此篇效果 -2D弓箭效果_拉弓 * * * * 

 

-  大概了解重點後,接下來進入完整教學   -

 

一、我們的拉弓幅度會隨著玩家「滑鼠拖曳幅度」來改變,所以我們必須要對滑鼠座標進行偵測

 

1.我們先在場景中新增一個叫做"BG"的Sprite當作背景(用來偵測「滑鼠拖曳幅度」)並將Position 設定為X=0, Y=0, Z=0

 

2.接下來為了要讓這個Sprite可以被偵測到,我們在Sprite上新增一個Boxcollider的元件

 

3.這樣子我們的背景就製作完成了!

 

 

 

二、接下來我們要在場景中我們的弓(Sprite),而弓弦的部分則由"Line Render"來呈現

 

1.首先我們先將我們的弓身設定為Sprite(圖片自己找喔~),並將其拖曳至場景中並將Position 設定為X=0, Y=0, Z=0

 

2.但是這時候場景中看不到弓身,這是因為我們弓身物件的LayerBG物件的同一層,所以為了要可以看到弓身,我們新增一個Layer

 

3.接下來我們點選Layers,並在欄位中新增一個Bow

 

4..在來來我們點選Sorting Layers,並按下"+"然後在欄位中新增一個BowLayer

 

5.接下來我們回到場景中,選定Bow(弓身物件),並設定它的Layer為"Bow",這樣我們就可以在場景中看到我們的弓身囉!

 

 

三、再來我們要幫我們的弓(Sprite)新增一條弓弦,弓弦的部分則由"Line Render"來呈現

 

1.要製作弓弦,我們先在Bow物件下新增一個空的子物件,將其命名為"String"

 

2.接下來我們為"String"物件上新增一個"Line Render" Component

 

3.接下來就要從"Line Render"設定我們的弓弦了,首先我們一樣將"Line Render"的Layer設定成"Bow"這樣我們才能看到我們的弓弦

 

3.現在我們必須幫我們的弓弦設定一個材質(這裡使用黑色材質球)

 

4.設定完材質後,我們要來定義這條弦是用「幾個點」所構成的,由於這是一把弓我們必須要有「上下兩點」固定弓弦,然後拉動「中間的點」,因此我們會需要三個點來組成這條弓弦

,接下來我們設定線段由三個點所組成。

 

5.接下來我們要設定點的位置,而線段會從點0-1-2去自行進行連接,接下來我們按照下面的參數來設定我們的點

Element 0 X=-0.4, Y=1.2, Z=0

Element 1 X=-0.4, Y=0, Z=0

Element 2 X=-0.4, Y=-1.2, Z=0

 

6. 點設定好後,我們可以來調整弓弦的粗細,將Width設定為0.05,這樣我們的弓弦就設定好囉!

 

四、製作好弓弦後我們要透過滑鼠來進行弓弦的拉動

 

1.新增一個C#程式碼叫做PullString,並將下列程式碼貼入PullString中

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class PullString : MonoBehaviour {

    // 宣告一條射線

    private Ray mouseRay1;

    //RaycastHit是用來儲存被射線所打到的位置

    private RaycastHit rayHit;

    //用來接收滑鼠點擊座標的XY

    public float posX, posY,length;

    //指向String子物件

    public GameObject MyString;

    //用來讀取MyString上的LineRender Component

    private LineRenderer MyStringLine;

 

    public void Start()

    {

        MyStringLine = MyString.GetComponent<LineRenderer>();

    }

    void Update()

    {

        //按住滑鼠左鍵開始進行拉弓功能

        if (Input.GetMouseButton(0))

        {

            //呼叫拉弓功能

            GetPos();

        }

     //放掉滑鼠左鍵

        if (Input.GetMouseButtonUp(0))

        {

          //呼叫拉弓功能,使弓弦回彈

            length = 0;

            StringNodeChange();

        }

    }

 

    //拉弓功能

    private void GetPos()

    {

        // 設定射線的行徑方向(螢幕-滑鼠點擊位置)

        mouseRay1 = Camera.main.ScreenPointToRay(Input.mousePosition);

 

        //如果射線以MouseRay1方向前進(螢幕到滑鼠點擊座標),有打到colliedr就會執行大括弧裡的程式碼

        if (Physics.Raycast(mouseRay1, out rayHit, 1000f))

        {

            //儲存滑鼠所點擊的座標

            posX = rayHit.point.x;

                posY = rayHit.point.y;

 

            // 計算拉動的幅度

            Vector2 mousePos = new Vector2(transform.position.x - posX, transform.position.y - posY);

                 length = mousePos.magnitude / 3f;

 

            //拉動的幅度只會介於01之間

            length = Mathf.Clamp(length, 0, 1);

 

            //呼叫弓弦變形功能

            StringNodeChange();

        }

    }

    //弓弦依照拖曳幅度length變形

    private void StringNodeChange()

    {

        //改變LineRender中第2個點的座標藉此達到拉弓效果

        MyStringLine.SetPosition(1, new Vector3(-0.4f+(length*-1),0,0));

    }

}

 

2.貼入完畢後,我們將這個程式碼拖曳到Bow物件上然後將String拖曳到程式碼的MyString欄位中

 

3.接下來按下執行,我們就可以進行拉弓囉!!!

 

-------------------------------------------------------------------------------------------------------------------------------------

 

我們有粉絲專頁囉!!!       

如果怕有問題連絡不到我們,歡迎隨時私訊FB粉專哦!!!

https://www.facebook.com/Straying2018/

 

●     如果這篇文章有幫助到您,希望您能留言給予我們鼓勵 !  

●     對於文章有任何的建議,非常歡迎留言告訴我們哦 !!!  

●     有任何想知道的功能也歡迎告訴我們,我們會盡快寫成部落格分享給大家!

 

 

 

 

 

 

 

arrow
arrow
    文章標籤
    弓箭 射擊 LineRender
    全站熱搜

    『迷途』 發表在 痞客邦 留言(0) 人氣()