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.但是這時候場景中看不到弓身,這是因為我們弓身物件的Layer在BG物件的同一層,所以為了要可以看到弓身,我們新增一個Layer
3.接下來我們點選Layers,並在欄位中新增一個Bow
4..在來來我們點選Sorting Layers,並按下"+"然後在欄位中新增一個Bow 的Layer
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;
//用來接收滑鼠點擊座標的X、Y值
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;
//拉動的幅度只會介於0與1之間
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/
● 如果這篇文章有幫助到您,希望您能留言給予我們鼓勵 !
● 對於文章有任何的建議,非常歡迎留言告訴我們哦 !!!
● 有任何想知道的功能也歡迎告訴我們,我們會盡快寫成部落格分享給大家!
留言列表