2024 虛擬實境 x 人因設計 11 unity第一人稱視角

更新於 發佈於 閱讀時間約 9 分鐘

剩下兩週上課囉,大家加油!!
在一開始我們在課程完成了椅子(角色的移動嘛),但遠遠的看著他移動好像缺少了一些遊戲體驗 嗎?><
這週我們就來改變遊戲的視角吧~~


raw-image

來看一下兩個版本的比較~~

原本WASD AD控制Y軸旋轉(轉頭),後來改成WASD控制平移座標,把旋轉特別移出來到滑鼠上,滑鼠可以控制Y軸及另一軸的旋轉(轉頭、仰頭低頭)

V1.0版本

public class ChairMove : MonoBehaviour
{
public float Speed = 1.0f;
private Rigidbody rb;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody>();
}

// Update is called once per frame
void Update()
{
this.gameObject.transform.Translate(Input.GetAxis("Vertical") * Speed * Time.deltaTime, 0, 0);
this.gameObject.transform.Rotate(0, Input.GetAxis("Horizontal") * 60 * Time.deltaTime, 0);
BaseMove();
}

private void BaseMove()
{
if (Input.GetKeyDown(KeyCode.Space))
//if (Input.GetKeyDown("Space")) 或打這句話也行
{
rb.AddForce(new Vector2(0, 200));
}

}

}


V2.0版本

public class ChairCamera : MonoBehaviour
{
public float speed = 1.0f;
//滑鼠
private Vector2 rotation; //旋轉值
public Vector2 sensitivity; //滑鼠靈敏度
private Vector2 GetmouseInput()
{
Vector2 input = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
return input;
}
// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{
Camera1Move();
if (Input.GetKey(KeyCode.Mouse2))
{
MouseControl();
}
}
private void Camera1Move()
{
this.gameObject.transform.Translate(Input.GetAxis("Horizontal") * speed * Time.deltaTime, 0, Input.GetAxis("Vertical") * speed * Time.deltaTime );

}
private void MouseControl()
{
rotation += GetmouseInput() * sensitivity * Time.deltaTime; //滑鼠移動
this.gameObject.transform.localEulerAngles = new Vector3(-rotation.y, rotation.x, 0); //滑鼠鏡頭角度
}


}

接著我們就細講囉~~

一樣先準備............一張椅子(角色)、一個不會掉下去的地板

#椅子讓他乾淨,不綁腳本(Script)在身上

raw-image

剛剛有說把滑鼠變成移動視角嘛,換句話說就是椅子就要跟相機一起。

所以就是把相機(視角)椅子(物件)用空物件(GameObject)綁一起。

raw-image
raw-image

像是這樣!!(這時候要確認一下,空物件跟相機的XYZ座標要對得上哦)

好~等等會把平移+視角的移動寫在同一個腳本,並且賦予在空物件上

新增一個腳本 叫ChairCameraMove,先把他加在Character(空物件)上


打開腳本後,我們先處理平移部分

raw-image

打個速度的公開變數,等等才可去外面方便調整

public float speed = 1.0f;


raw-image

之後寫一個移動的方法

private void CharacterMove()

{

this.gameObject.transform.Translate(Input.GetAxis("Horizontal") * speed * Time.deltaTime, 0, Input.GetAxis("Vertical") * speed * Time.deltaTime);

}

raw-image

CharacterMove();

移動跟之前一樣,讓他每分每秒都要持續偵測,所以要寫在Update 方法內讓他跑。

不過跟之前比較不一樣。之前是直接打在Update裡面嘛,要另外寫個方法是因為,後續如果有B、C、D等等角色也想要這方法,直接呼叫方法名稱就可以用了。

raw-image

這前一個腳本打的 :)

(先試看看可不可以正常移動)


OK就繼續下一步,滑鼠移動~~

raw-image

宣告三個變數 ROTATION、SENSITIVITY、GAMEMOUSEINPUT

private Vector2 rotation; //旋轉值

public Vector2 sensitivity; //滑鼠靈敏度

private Vector2 GetmouseInput()

{

Vector2 input = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));

return input;

}

#

  • 使用 Input.GetAxis("Mouse X")Input.GetAxis("Mouse Y") 來獲取滑鼠在水平方向和垂直方向上的移動。
  • 這些輸入值被儲存在一個 Vector2 向量中並返回。



raw-image

然後寫一個方法滑鼠移動~~

private void MouseControl()

{

rotation += GetmouseInput() * sensitivity * Time.deltaTime; //滑鼠移動

this.gameObject.transform.localEulerAngles = new Vector3(-rotation.y, rotation.x, 0); //滑鼠鏡頭角度

}

    • 首先,用 GetmouseInput 方法來獲取滑鼠輸入。
    • 將得到的滑鼠輸入乘以 sensitivity,來控制旋轉的靈敏度。
    • 乘以 Time.deltaTime,以使旋轉角度與每幀之間的時間間隔成比例,保持旋轉的平滑性。
    • 最後,將計算出的旋轉增量加到 rotation 上,更新當前的旋轉值。
raw-image


  • 將更新後的旋轉值應用到當前遊戲物體的原地旋轉角度。
  • rotation.x 用來控制水平方向的旋轉(左右)。
  • rotation.y 用來控制垂直方向的旋轉(上下),並且取反(-rotation.y),這樣滑鼠向上移動時視角會向上移動,向下移動時視角會向下移動,符合一般用戶的操作習慣。

2D 3D邏輯有點不一樣 :)

#這個如果不懂正負,直接遊戲試試比較快~

raw-image


疑,等等。 +=?

+=這什麼,他是指定運算子,舉例最快~~

i=5; ....這個很直覺就是i等於5,沒錯吧

i+=5;...那這個的話大家就比較不知道了,因為我們平常不會這樣算,他就是 i=i+5,會一直壘加上去

運算式參考資料

那如果我把剛剛 rotation 的+拿掉 ,就會變成,每次動都會歸零。不適用於轉視角這~

再把Rigidbody的Rotation凍結起來~,不然撞到東西會東倒西歪

raw-image


最後成果展示,變得更讚了~

raw-image
avatar-img
4會員
20內容數
Gavin Hsieh ㄉ基地
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Gavin Hsieh ㄉ基地 的其他內容
大家注意看看,有沒有發現Collider 裡面也有一個材質(Material)? 你會發現你沒辦法貼一般漂漂釀釀的材質上去QQ 他上面是寫(Physic Material)物理材質!!?? 那物理材質在哪? 跟新增一般Material一樣路徑哦~~
其他特殊材質調整 Particles Q:大家有沒有發現剛剛葉子是一面有顏色一面透明? A:Unity的渲染只有單面,超奇怪ㄉ啦,他軟體預設就是單面,要改成雙面也行,但會造成電腦負擔,所以只需在想要雙面渲染的物體上賦予即可,不用整個專案都給它。 單面渲染的情形 材質球著色器定義 Sh
剛剛調了第一層Rendering Mode渲染模式的參數 進入第二層#Opaque渲染參數介紹 搭配教材一起做好ㄌ,先下載檔案樹葉葉葉🌿🌿🌿 解壓縮後把他拖移進去ASSET裡面 點開剛剛LeafPack,找到Mesh>選擇FBX>找到後拖曳到遊戲編輯畫面 部份模型( Fbx&
材質和貼圖在遊戲開發中扮演著極為重要的角色,其決定了遊戲物件的外觀和表現。 材質(Material)在Unity中定義物體外觀和視覺特性的屬性集合。 包含了物體的顏色、光澤度、透明度、反射率等信息,可以透過調整這些屬性來改變物體在遊戲中的表現形式。舉例來說,可以創建金屬、塑料、木材等不同材質類型
觸發器(Trigger) 是碰撞器(Collider) 的另一種型態,可製作不同的互動方式。 那我們就來看Trigger的練習吧 新建一個CUBE,一樣新增一個腳本給他~,命名EntranceTrigger 腳本打下剛剛測試的,確認可以正常運作 private void OnTriggerEn
來做個簡單的小練習ㄅ 先來個Collider 建一個等等跟椅子互動的物件(Sphere),並給他一個材質區分顏色
大家注意看看,有沒有發現Collider 裡面也有一個材質(Material)? 你會發現你沒辦法貼一般漂漂釀釀的材質上去QQ 他上面是寫(Physic Material)物理材質!!?? 那物理材質在哪? 跟新增一般Material一樣路徑哦~~
其他特殊材質調整 Particles Q:大家有沒有發現剛剛葉子是一面有顏色一面透明? A:Unity的渲染只有單面,超奇怪ㄉ啦,他軟體預設就是單面,要改成雙面也行,但會造成電腦負擔,所以只需在想要雙面渲染的物體上賦予即可,不用整個專案都給它。 單面渲染的情形 材質球著色器定義 Sh
剛剛調了第一層Rendering Mode渲染模式的參數 進入第二層#Opaque渲染參數介紹 搭配教材一起做好ㄌ,先下載檔案樹葉葉葉🌿🌿🌿 解壓縮後把他拖移進去ASSET裡面 點開剛剛LeafPack,找到Mesh>選擇FBX>找到後拖曳到遊戲編輯畫面 部份模型( Fbx&
材質和貼圖在遊戲開發中扮演著極為重要的角色,其決定了遊戲物件的外觀和表現。 材質(Material)在Unity中定義物體外觀和視覺特性的屬性集合。 包含了物體的顏色、光澤度、透明度、反射率等信息,可以透過調整這些屬性來改變物體在遊戲中的表現形式。舉例來說,可以創建金屬、塑料、木材等不同材質類型
觸發器(Trigger) 是碰撞器(Collider) 的另一種型態,可製作不同的互動方式。 那我們就來看Trigger的練習吧 新建一個CUBE,一樣新增一個腳本給他~,命名EntranceTrigger 腳本打下剛剛測試的,確認可以正常運作 private void OnTriggerEn
來做個簡單的小練習ㄅ 先來個Collider 建一個等等跟椅子互動的物件(Sphere),並給他一個材質區分顏色
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
這篇內容,將透過實戰教學,介紹GameMaker中的Event。包括Event的簡介、Create的講解、Step的講解、Events的基本操作。
Thumbnail
這篇內容,將透過實戰教學,介紹GameMaker中的Room。包括Room的簡介、調整寬高、圖層功能的概述、用Object來建立實體。
Thumbnail
這篇內容,將簡單介紹Asset Browser、Workspace、Inspector、Code Browser,作為入門的介面導覽。
Thumbnail
這篇內容,將教你如何開啟新的GameMaker專案,並調整畫面佈局。也會講解,為何建議用英文語系,來進行遊戲開發。
Thumbnail
介紹Unreal Sequencer鏡頭工具,CG動畫的學習經驗,並提供相關教程,適合想學習Cinematic Designer的人。
Thumbnail
新學季的第二天實習,帶著新的思考與星期二的學習來到了今天,今天我給自己的目標是觀察不同形式的互動與引導形式,然而從品師的課程,與綠光種子教室的課後輔導過程中,我看見並學習到了珍貴的事物。
Thumbnail
作者分享選修課程「遊戲式學習設計」的期末報告,挑一篇相關論文來進行分析。該論文研究了遊戲式學習工具對於提高德語口語練習成效的影響,並附上詳細的桌遊設計過程。文章最後提到了遊戲化的概念,並推薦了一本有關遊戲化的書籍以及一支TED演講影片。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
這篇內容,將透過實戰教學,介紹GameMaker中的Event。包括Event的簡介、Create的講解、Step的講解、Events的基本操作。
Thumbnail
這篇內容,將透過實戰教學,介紹GameMaker中的Room。包括Room的簡介、調整寬高、圖層功能的概述、用Object來建立實體。
Thumbnail
這篇內容,將簡單介紹Asset Browser、Workspace、Inspector、Code Browser,作為入門的介面導覽。
Thumbnail
這篇內容,將教你如何開啟新的GameMaker專案,並調整畫面佈局。也會講解,為何建議用英文語系,來進行遊戲開發。
Thumbnail
介紹Unreal Sequencer鏡頭工具,CG動畫的學習經驗,並提供相關教程,適合想學習Cinematic Designer的人。
Thumbnail
新學季的第二天實習,帶著新的思考與星期二的學習來到了今天,今天我給自己的目標是觀察不同形式的互動與引導形式,然而從品師的課程,與綠光種子教室的課後輔導過程中,我看見並學習到了珍貴的事物。
Thumbnail
作者分享選修課程「遊戲式學習設計」的期末報告,挑一篇相關論文來進行分析。該論文研究了遊戲式學習工具對於提高德語口語練習成效的影響,並附上詳細的桌遊設計過程。文章最後提到了遊戲化的概念,並推薦了一本有關遊戲化的書籍以及一支TED演講影片。