前往
大廳
主題

EP02:早上好C#,我現在有Input,我很喜歡Vector3,但if和else我不懂,可以有and嗎。

幻雪 | 2022-03-17 01:28:03 | 巴幣 4 | 人氣 285

前言
        繼上回的內容處裡好手把輸入,我接下來開始處理玩家物件的方向,這也是我之前腦袋卡住最久的部分,有些問題現在解決了,回想起來內容有點白癡白癡的,畢竟第一次碰寫程式啊,這篇主要是說明我腦袋運轉不是很順利的過程,與其他不會程式的讀者共勉之

我現在有Input後我想轉彎        
    Vector3 moveDir = Vector3.forward;
    Quaternion currentRotation;
    public float moveSpeed;
    public float invoTime;
    public float invoRepeat;
   
    void Start()
    {
       //InvokeRepeating("Move", invoTime, invoRepeat);
    }
    void Move()
    {
        transform.Translate(moveDir);
    }
     void Update()
    {
        //Move
        transform.Translate(moveDir * moveSpeed * Time.deltaTime);
    
        if (Gamepad.all[0].dpad.up.isPressed)
            moveDir = Vector3.forward;
            if (Gamepad.all[0].dpad.down.isPressed)
            moveDir = Vector3.back;
......
     dpad有16行就不全貼出來了,InvokeRepeating則是為了測試其他移動方法先隱藏了,現在要做的是轉向時的邏輯處裡,當時寫出來的是
if (moveDir = Vector3.forward)
   if(Gamepad.all[0].dpad.left.isPressed)
      {
        transform.rotation(0,90,0);
        moveDir = Vector3.left;
      }
......

我很喜歡Vector3,但if和else真的不懂可以有and嗎,所以現在是物體亂轉時間

        上一段結果不盡理想,程式動不了,以後記來說是因為對程式寫法的不熟悉、不明白教學資源給的邏輯和固執導致的種種錯誤。

if和else可以有and嗎
        if的設定上在拜讀其他巴友的文章
if (moveDir = Vector3.forward)要更改成if (moveDir == Vector3.forward)
才不會被認為在給予數值,且if也不給你亂算數學(可......可惡)。
        兩層的if可以寫成if (moveDir = Vector3.forward && Gamepad.all[0].dpad.left.isPressed)
if簡單的測試後沒有問題就決定這樣解決了。

執著於Vector3
        只看了一個單元的教學就開專案實屬過急,逛了一圈Unity Documentation也沒有結果,最後是VSCode提醒有個Rotate也可以轉,transform.rotation(0,90,0);改為transform.Rotate(0,90,0);測試後沒有問題,但依然不知道if底下為啥不能放transform.rotation就是了
        物件可以轉彎了,但物件的Local座標卻跟著改變了導致Vector3.forward也所指的「前方」轉了個方向
        Local座標轉換後依然「向前」,直到輸入其他指令Vector3.forward指令從Global的Z改到X軸導致即使Vector3.left有作用也看起來沒作用。

眾裡尋他千百度 ,那人卻在上一行亂轉
        經過兩天鑽磨問題和兩天放爛後,在使用
transform.Translate///moveDir * 有的沒的///moveDir = transform.Translate()
等偏方後,解法突然出現了,『既然轉彎後物件依然「向前」那只要轉彎就好了啊』,頓時物件豁然開朗自由擺盪,前幾天的我如笑話一樣。

        跑了一輪論壇後發現要用Quaternion.Euler(0,0,0)用來固定轉向而不被時間與輸入次數影響,這下移動與旋轉的第一部份就搞定了,剩下就是前進時不能後退這類不准縮頭的if要寫了,最後PO上前後程式碼對比。
希望有幫助到需要的人。


創作回應

更多創作