汽車圖片查詢網(wǎng)站源碼十大網(wǎng)站排行榜
概述
交互功能使用同一個按鈕或按鈕列表,在不同情況下顯示不同的內(nèi)容,按下執(zhí)行不同的操作。
按選項個數(shù)分類
環(huán)境交互系統(tǒng)可分為兩種,單選項交互,一般使用射線檢測;多選項交互,一般使用范圍檢測。第一人稱游戲單選多選都可以用,因為第一人稱人物背對一個可交互對象時顯示交互選項讓玩家疑惑,所以第一人稱使用射線檢測或使用人物面前的觸發(fā)器進行范圍檢測。第三人稱因為人物一般在或者接近畫面中心,基本上必須用以人物為中心的范圍檢測。
本質(zhì)上,單選項交互讓玩家通過轉(zhuǎn)動視角選擇交互選項,在可交互對象很密集的情景,玩家很難準確瞄準交互對象,但開發(fā)簡單。多選項交互玩家選擇想要的交互選項更容易,開發(fā)復雜。
按輸入方式分類
電腦通過鍵盤按鍵(一般是F)交互,滑輪選選項;手機通過按屏幕交互,上下滑動選選項,這導致二者的實現(xiàn)方式又不一樣。電腦通過InputManager或PlayerInput,手機通過按鈕回調(diào)。就是說電腦上的多個選項可以只是Image,手機上的選項有Button。
環(huán)境交互系統(tǒng)由這幾個部分構(gòu)成:
- 環(huán)境檢測;
- 交互類型判斷;
- UI顯示和回調(diào)添加;
- 執(zhí)行;
對于玩家,他能直接感覺到的只有UI顯示和按下執(zhí)行,環(huán)境檢測、根據(jù)類型判斷UI顯示的內(nèi)容、根據(jù)類型判斷執(zhí)行的類型完全由程序完成,所以玩家感覺不到交互系統(tǒng)的復雜性。
數(shù)據(jù)結(jié)構(gòu)
一個游戲的交互類型選項是確定的,有限的,適合用枚舉表示。把游戲支持的所有交互類型定義為枚舉的選項:
public enum ActionOption{None,TakeGun,SwapGun,TakeItem,Talk,CheckPack
}
如果是單選項交互,就聲明一個交互枚舉變量,如果是多選項交互,就聲明一個交互枚舉列表。
環(huán)境檢測
環(huán)境交互函數(shù)通過射線檢測或范圍檢測得到可交互對象,使用分類函數(shù)得到這個交互的類型、對象名稱,以此得到顯示在界面上的文本、按下需要執(zhí)行的操作。
可交互對象可能是一個物品、一個NPC、一扇門,交互對象類型毫不相干,但是都有“可交互”的特征。這很符合接口的設(shè)計初衷,所以可以定義接口:
public interface Interactive
{public abstract void InterAct();
}
所有的可交互對象繼承可交互接口。射線或范圍檢測只要在檢測到的碰撞體上嘗試獲得接口,就能得到所有可交互對象。
if(Physics.Raycast(rayOrigin,rayVector,out raycastHit,10,interactionLayerMask)&&Vector3.Distance(player.transform.position,raycastHit.point)<interactionRange){if(raycastHit.collider.TryGetComponent(out interactive)){}
}
再把這個接口變量交給一個函數(shù)使用里氏轉(zhuǎn)換判斷它的具體類型 。
用滾輪改變選中的交互選項:
void Update(){GetScrollInput();}public void GetScrollInput(){float delta=Mouse.current.scroll.ReadValue().y;if(delta<0){selectedInteraction++;}else if(delta>0){selectedInteraction--;}selectedInteraction=Mathf.Clamp(selectedInteraction,0,actionOptions.Count-1);UpdateSelectedInteraction();}