小屋創作

日誌2015-10-27 01:36

Unity第一人稱角色運用準心與物件互動

作者:紫嵐蒼空

關鍵字:Unity、FPS、Ray、互動、觸發


這篇文章想要教如何使用在第一人稱運用準心與物件進行觸發或互動
由於屋主我的慣用程式語言是C#,所以教學文程式部分是用C#撰寫喔~



*首先新增專案並勾選Characters資源


*建個Plane當作地板,拉出第一人稱角色FPSController


接著要來製作FPS遊戲畫面中的準心

新增UI物件的RawImage並設定在畫面中央,Texture設定自製的準心PNG圖
RawImage的Inspector設定詳見下圖




來示範「準心對準Cube後按下鍵盤E鍵變換Cube顏色」

在Plane上放4個Cube並放入純色材質球




*新增一個C#腳本RayScript (命名隨意)

拖曳給FirstPersonCharacter,跟攝影機在同一個物件中


*接著我們要開始撰寫程式

先把需要物件宣告出來

Ray ray; //射線
float raylength = 1.5f; //射線最大長度
RaycastHit hit; //被射線打到的物件



接著在Updata區塊中撰寫

void Update()  
    {
        ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0));
        //由攝影機射到是畫面正中央的射線

        if (Physics.Raycast(ray, out hit, raylength))
// (射線,out 被射線打到的物件,射線長度),out hit 意思是:把"被射線打到的物件"帶給hit
        {
            hit.transform.SendMessage("HitByRaycast", gameObject, SendMessageOptions.DontRequireReceiver);
            //向被射線打到的物件呼叫名為"HitByRaycast"的方法,不需要傳回覆

            Debug.DrawLine(ray.origin, hit.point, Color.yellow);
            //當射線打到物件時會在Scene視窗畫出黃線,方便查閱

            print(hit.transform.name);
            //在Console視窗印出被射線打到的物件名稱,方便查閱                       
        }
        else
        {            
        }
    }


接著執行遊戲


這樣能在遊戲進行中從Scene觀察射線(黃線)

開啟Unity上方的工具列Window > Console 視窗
可以看到不斷的printhit的名稱(也就是Cube(4))


*接著要講解重點

物件如果想要被射線打中必須要有添加Collider(碰撞器),不然射線會穿透過去
Cube的預設Collider就是Box Collider 以此類推


*接著撰寫Cube改變顏色的程式

新增一個C#腳本CubeScript (命名隨意)並拖曳給Cube
宣告一個渲染(Renderer)

Renderer R1;



在Start區塊中

void Start()
    {
        R1 = gameObject.GetComponent<Renderer>(); //把R1指定為物件的Renderer
    }



另外自行撰寫HitByRaycast區塊(這是自己命名的,跟上支程式對應就好)

void HitByRaycast() //被射線打到時會進入此方法
    {
        if (Input.GetButtonUp("E")) //當按下鍵盤 E 鍵時
        {
            if (R1.material.color== Color.green) //如果Renderer材質是綠色
            {
                R1.material.color = Color.red; //Renderer材質換成紅色
            }
            else
            {
                R1.material.color = Color.green; //Renderer材質換成綠色
            }
        }
    }



「當按下鍵盤 E 鍵時」
這件事可以在Unity上方工具列Edit>Project Settings>Input設定



*接著重新檢查
  • RayScript、CubeScript兩支程式是否內容有誤
  • 程式是否已經拖曳到場景物件上
  • 要能被射線打中的物件必須要有添加Collider
 
執行遊戲
成功的將Cube的顏色改為程式指定的紅色






透過這樣判斷機制,可以在HitByRaycast()方法中寫入各種相對應動作

例如:撥放開門動畫,撿取道具,移動物件 等等

另外附上這篇文章的範例專案 v5.2.0f3
開啟專案後Project視窗點擊Scene 1 開啟場景
https://drive.google.com/file/d/0BwLyxT5ng5_zZHlxR3NWZ3J0Tjg/view?usp=sharing&resourcekey=0-HqDXMJG5-OJ_vChJJsso7A

文章有誤或是疑問可以留言給我,如果可以我會盡量回覆

9

3

LINE 分享

相關創作

Brackeys回來了! 這次改教Godot

20240427 遊戲進度:程式優化

[紀錄]將Unity製作的APP上架至Meta的Quest商城

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】