【Unity】使用新版Input System在Unity中創建流暢的角色控制

更新 發佈閱讀 10 分鐘

新版Input System

  1. 要先來調整設定:

(如果日後發現移動不了,可能是這邊有出問題,可以把這邊視為一個檢查點)

vocus|新世代的創作平台
  1. 下載Input System
vocus|新世代的創作平台
  1. 在script中的寫法:

(這邊的功能是讀取移動的值而已,主要目的是讓unity讀到movement,絕對不是托篇幅的拉🥺)

using UnityEngine.InputSystem; //這格式要自己興增的
move
public class PlayerControl : MonoBehaviour
{
[SerializeField] InputAction movement;
void Start(){}

private void OnEnable()
{
movement.Enable();
}
private void OnDisable()
{
movement.Disable();
}

// Update is called once per frame
void Updae()
{
float horizontalThrow = movement.ReadValue<Vector2>().x;
float verticalThrow = movement.ReadValue<Vector2>().y;
Debug.Log(horizontalThrow);
Debug.Log(verticalThrow);
}
}

可以看到上面的[SerializeField] InputAction movement;,在回到unity後,他會跑出Movement,選取“+”

vocus|新世代的創作平台
vocus|新世代的創作平台

這邊就視當下使用情況而定(我這邊是只要做到上下左右移動)

vocus|新世代的創作平台

選取完後,會跑出粉紅色的這些小東西,那就是你可以操控的選項。

  1. 接著要來設定每一個動作所觸發的按鍵:

(點選粉紅色小方塊)

vocus|新世代的創作平台

選擇”Path"

vocus|新世代的創作平台

選擇"listen",接這按你想要使用的按鍵,他會自動顯示出該按鍵的名稱,那就選擇她即可:

vocus|新世代的創作平台

寫到這邊,突然回憶到剛剛給的代碼中出現了這一段:

 private void OnEnable()
{
movement.Enable();
}
private void OnDisable()
{
movement.Disable();
}
  1. Order of execution for event functions

恩...,這樣乍看一下,大概就是OnEnable跟OnDisble決定了movement的啟用與否。這兩個方法函數必不是自創的,這邊就要來看到unity他的執行順序;

原文:https://docs.unity3d.com/Manual/ExecutionOrder.html

這邊我附上有使用到的兩個函數位置:

vocus|新世代的創作平台
vocus|新世代的創作平台

其實就是分別在初始化(Initialization)跟退役(Decommissioning)中去啟用跟進用movement,並在每一幀去重複這樣。


6. 寫移動的腳本

好拉,要來繼續說正事了,這邊附上代碼:

using UnityEngine;
using UnityEngine.InputSystem; //手動添加

public class PlayerControl : MonoBehaviour
{
[SerializeField] float speed = 10f; // 移动速度
[SerializeField] InputAction movement;

void Start()
{
movement.Enable();
}

private void OnDisable()
{
movement.Disable();
}

void Update()
{
Vector2 input = movement.ReadValue<Vector2>();
float horizontalInput = input.x;
float verticalInput = input.y;

// 根据输入计算移动距离
float xOffset = horizontalInput * Time.deltaTime * speed;
float yOffset = verticalInput * Time.deltaTime * speed;

// 更新位置
transform.localPosition = new Vector3(xOffset, yOffset, transform.localPosition.z);
}
}
  1. 增加移動範圍限制:

其實這邊是另外加的拉~,如果你希望物體在移動範圍可以有一個限制(這邊是指物體本身移動限制,而非在在場景給予的限制),可以使用Mathf.Clamp()

官方文件:https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html

vocus|新世代的創作平台

用法就是如上面所寫:

限制範圍 = Mathf.Clamp(目標物, 最小範圍, 最大範圍);

那把他應用進來:(newXPos跟 newYPos)

using UnityEngine;
using UnityEngine.InputSystem; //手動添加

public class PlayerControl : MonoBehaviour
{
[SerializeField] float speed = 10f; // 移动速度
[SerializeField] float xRange = 5f; // X轴移动范围
[SerializeField] float yRange = 5f; // Y轴移动范围
[SerializeField] InputAction movement;

void Start()
{
movement.Enable();
}

private void OnDisable()
{
movement.Disable();
}

void Update()
{
Vector2 input = movement.ReadValue<Vector2>();
float horizontalInput = input.x;
float verticalInput = input.y;

// 根据输入计算移动距离
float xOffset = horizontalInput * Time.deltaTime * speed;
float yOffset = verticalInput * Time.deltaTime * speed;

// 计算新的位置,并限制在范围内
float newXPos = Mathf.Clamp(transform.localPosition.x + xOffset, -xRange, xRange);
float newYPos = Mathf.Clamp(transform.localPosition.y + yOffset, -yRange, yRange);

// 更新位置
transform.localPosition = new Vector3(newXPos, newYPos, transform.localPosition.z);
}
}

舊版Input System

舊版的好處就是一定不會有問題拉~

//處理上下左右移動
void ProcessTranslation()
{
//控制水平方向
horizontalThrow = Input.GetAxis("Horizontal");
float xOffset = horizontalThrow * Time.deltaTime * SpeedControl;
float newXPos = transform.localPosition.x + xOffset;
float clampXPos = Mathf.Clamp(newXPos, -xRange, xRange);

//控制垂直方向
verticalThrow = Input.GetAxis("Vertical");
float yOffset = verticalThrow * Time.deltaTime * SpeedControl;
float newYPos = transform.localPosition.y + yOffset; // 修正这里使用 transform.localPosition.y
float clampYPos = Mathf.Clamp(newYPos, -yRange, yRange);

transform.localPosition = new Vector3(clampXPos, clampYPos, transform.localPosition.z);

}


🥰以上是本文所分享的內容。如果您發現任何錯誤或遺漏,請不吝賜教。




留言
avatar-img
W. C. Chen的沙龍
4會員
10內容數
W. C. Chen的沙龍的其他內容
2024/03/27
先來名詞解釋jython跟JES: jython是一種實現了Python語言的Java平台版本的解釋器。它允許開發人員在Java虛擬機(JVM)上運行Python代碼,從而實現了Python語言與Java平台的無縫集成。 JES(Jython Environment for Students)是
Thumbnail
2024/03/27
先來名詞解釋jython跟JES: jython是一種實現了Python語言的Java平台版本的解釋器。它允許開發人員在Java虛擬機(JVM)上運行Python代碼,從而實現了Python語言與Java平台的無縫集成。 JES(Jython Environment for Students)是
Thumbnail
2024/03/25
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
2024/03/25
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
2023/08/29
這篇想來寫,剛碰到js得時候,為了讓程式可以運作而安裝Node.js 。Node.js 是能夠在伺服器上面運行 JavaScript 的應用平台環境,透過 Node.js 提供的函式庫與執行環境能完成伺服器端服務。此篇幅就直接從純後端的角度切入摟(對不起拉我寫來寫去還是不知道怎麼順順的寫好文章開頭Q
Thumbnail
2023/08/29
這篇想來寫,剛碰到js得時候,為了讓程式可以運作而安裝Node.js 。Node.js 是能夠在伺服器上面運行 JavaScript 的應用平台環境,透過 Node.js 提供的函式庫與執行環境能完成伺服器端服務。此篇幅就直接從純後端的角度切入摟(對不起拉我寫來寫去還是不知道怎麼順順的寫好文章開頭Q
Thumbnail
看更多
你可能也想看
Thumbnail
UnityEvent 簡單介紹。
Thumbnail
UnityEvent 簡單介紹。
Thumbnail
這篇文章將會講述 Unity 自帶參數的功能,在撰寫時要怎麼進行封裝。
Thumbnail
這篇文章將會講述 Unity 自帶參數的功能,在撰寫時要怎麼進行封裝。
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
這篇文章將會介紹 Unity Input System,這是一個適用於不同平台切換的官方系統,用於玩家按鍵輸入與不同控制器的操作。
Thumbnail
這篇文章將會介紹 Unity Input System,這是一個適用於不同平台切換的官方系統,用於玩家按鍵輸入與不同控制器的操作。
Thumbnail
新版Input System 要先來調整設定: (如果日後發現移動不了,可能是這邊有出問題,可以把這邊視為一個檢查點) 下載Input System 在script中的寫法: (這邊的功能是讀取移動的值而已,主要目的是讓unity讀到movement,絕對不是托篇幅的拉🥺) using
Thumbnail
新版Input System 要先來調整設定: (如果日後發現移動不了,可能是這邊有出問題,可以把這邊視為一個檢查點) 下載Input System 在script中的寫法: (這邊的功能是讀取移動的值而已,主要目的是讓unity讀到movement,絕對不是托篇幅的拉🥺) using
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這篇文章將會講述如何使用程式腳本讀取 Input System 的玩家輸入。
Thumbnail
這篇文章將會講述如何使用程式腳本讀取 Input System 的玩家輸入。
Thumbnail
這篇文章將會介紹 Unity Animatior Edit 參數控制的方法,藉由連結程式腳本和動畫編輯器,讓動畫更靈活的運作。
Thumbnail
這篇文章將會介紹 Unity Animatior Edit 參數控制的方法,藉由連結程式腳本和動畫編輯器,讓動畫更靈活的運作。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News