国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Unity入門】物體5種移動方法

這篇具有很好參考價值的文章主要介紹了【Unity入門】物體5種移動方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、通過修改位置來實現(xiàn)移動

利用修改Transform組件的position的兩種常用方法。

  1. 使用Translate()函數(shù)
/*物體將向x方向移動1.5單位*/
transform.Translate(1.5f,0,0);
  1. 直接指定新的位置
/*將物體放在(1.5f,0,0)的位置上*/
transform.position = new Vector3(1.5f,0,0);

將上述兩種方法在 void Update()實現(xiàn)每一幀物體向x方向移動1.5個單位,具體代碼如下:

  void Update()
    {   
        transform.Translate(1.5f,0,0);
        //或
        transform.position += new Vector3(1.5f,0,0);
    }

注意:此處1.5為啥要寫1.5f,根據(jù)C#的語法規(guī)定,直接寫1.5會被認(rèn)為double類型的數(shù),而這里需要flaot類型數(shù),三個數(shù)據(jù)只要其中一個帶有f就行。

由于電腦無法保證穩(wěn)定的幀率,會出現(xiàn)幀率高,物體移動就快,幀率低,物體移動就慢。而在游戲開發(fā)大部分情況中,我們應(yīng)該確?!泵棵胍苿油瑯拥木嚯x”,因此,我們應(yīng)該做如下修改。

	void Update()
    {   
        transform.Translate(1.5f*Time.deltaTime,0,0);
        //或
        transform.position += new Vector3(1.5f*Time.deltaTime,0,0);
    }

此處*Time.deltatime是確保每秒移動同樣的距離。

Time.deltatime 是兩幀之間的間隔,如幀率為60幀/秒,則Time.deltatime =0.0167秒,或者幀率為10幀/秒,則Time.delatatime = 0.1秒。所以Time.delatatime是一個隨幀率改變而改變的數(shù)值,確保物體每秒移動的數(shù)值是一樣的。

ps:Time.deltatime是一個很小的數(shù)值,因此與他相乘的數(shù)值應(yīng)該大些。

二、通過物理系統(tǒng)實現(xiàn)位移

適用于對已經(jīng)掛載剛體組件的物體
以下是常用的兩種方法

  1. 利用AddForce()對物體施加力改變位置
	public Rigidbody rb;
	void Update()
	{   
		rb.AddForce(100,0,0);
	}

注意:一定要給物體掛載剛體,物體才會收到力的作用

此處AddForce()的參數(shù)為Vector3類型,該參數(shù)用一個向量表示力,且符合牛頓力學(xué)

這里表示每幀(時間)對物體軸方向施加100N的力,根據(jù)牛頓力學(xué),力至少持續(xù)一點時間才會引起物體速度的變化。所以此處必有位移,具體的位移,由你施加的力跟每幀的時間有關(guān)。在游戲開發(fā)中,我們只需要一邊測試一邊修改,確保一個合適數(shù)值即可。

  1. 直接修改物體的速度
    此處表示物體在X軸以10m/s的速度移動,y軸跟z軸方向速度保持不變。
    此方法相比上一個方法能讓物體直接跳過加速度引起速度變化的步驟,使物體能夠勻速運動。

注意:物理系統(tǒng)對于時間是非常敏感的。

舉個例子:我們需要子彈0.1秒后擊中目標(biāo),當(dāng)更新頻率不一定,子彈0.3秒才擊中目標(biāo),這不是我們想要的。

當(dāng)設(shè)備運行不流暢的時候,幀率下降,Time.deltatime會變大,不在適用。所以我們應(yīng)該做如下修改,利用 FixedUpdate()函數(shù),可以保證穩(wěn)定的間隔。獲取兩段Update之間的時間間隔為Time.deltatime,而獲得兩次FixedUpdate之間的時間間隔為Time.fixedDeltaTime,一般Time.fixedDeltaTime是一個固定的值(默認(rèn)為0.0.2秒,可通過Edit——Project Setting——Time來修改)。

修改代碼如下:

	public Rigidbody rb;
	void FixedUpdate()
	{   
		rb.AddForce(10*Time.fixedDeltaTime,0,0);
		//或
		rb.velocity = new Vector3(10*Time.fixedDeltaTime,rb.velocity .y,rb.velocity.z);
	}

三、通過CharacterController組件

	private void Start()
    {
        _playerCC = this.GetComponent<CharacterController>();
    }
    void FixedUpdate()
	{   
		_playerCC.Move(new Vector3(1.5f*Time.deltaTime,0,0););
	}

四、通過輸入控制物體移動

第一種方法

	void Update()
    {   
        float horizontal = Input.GetAxis("Horizontal");
        float vetical = Input.GetAxis("Vetical");
 
       transform.Translate(horizontal*speed*Time.deltaTime,vetical*speed*Time.deltaTime,0);
       //或
       transform.position += new Vector3(horizontal*speed*Time.deltaTime,vetical*speed*Time.deltaTime,0);
    }

此處的speed為一個變量,我們可以通過修改speed來控制物體移動的距離。

假設(shè)我們定義 float speed =10;

即此處每幀最大的位移為1100.0167=0.167米。

第二種方法

	public Rigidbody rb;
    public float speed;
    void FixedUpdate()
    {   
        float horizontal = Input.GetAxis("Horizontal");
        float vetical = Input.GetAxis("Vetical");
 
        rb.AddForce(horizontal*speed*Time.fixedDeltaTime,vetical*speed*Time .fixedDeltaTime,0);
       //或添加速度
        rb.velocity = new Vector3(horizontal*speed*Time.fixedDeltaTime,vetical*speed*Time.fixedDeltaTime,rb.velocity.z);
    }

第三種方法

    private void Start()
    {
        _playerCC = this.GetComponent<CharacterController>();
    }
    public void FixedUpdate() 
    {
        Vector3 motionValue = Vector3.zero;
        /*獲取鍵盤輸入*/
        float h_InputValue = Input.GetAxis("Horizontal");//左右移動
        float v_InputValue = Input.GetAxis("Vertical");//前后移動
        motionValue += this.transform.forward * v_InputValue * moveSpeed * Time.fixedDeltaTime;//前后方向的位移
        motionValue += this.transform.right * h_InputValue * moveSpeed * Time.fixedDeltaTime;//左右方向的位移
        _playerCC.Move(motionValue);
    }

通過上述的三種方法,我們就可以實現(xiàn),每當(dāng)按下相應(yīng)的鍵,物體就會往相應(yīng)的方向移動一定的距離。文章來源地址http://www.zghlxwxcb.cn/news/detail-786860.html

到了這里,關(guān)于【Unity入門】物體5種移動方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Unity腳本開源】記錄鼠標(biāo)按下的位置和移動的距離來進(jìn)行物體的旋轉(zhuǎn),并在鼠標(biāo)釋放后將物體恢復(fù)到初始旋轉(zhuǎn)位置

    ??作者:白日參商 ???♂?個人主頁:白日參商主頁 ??堅持分析平時學(xué)習(xí)到的項目以及學(xué)習(xí)到的軟件開發(fā)知識,和大家一起努力呀?。?! ????加油! 加油! 加油! 加油 ??歡迎評論 ??點贊???? 收藏 ??加關(guān)注+! 提針對這個需求,以下是示例腳本代碼: ??作者

    2024年02月12日
    瀏覽(22)
  • unity 物體移動方法

    ? ? 在Unity3D中,有多種方式可以改變物體的坐標(biāo),實現(xiàn)移動的目的,其本質(zhì)是每幀修改物體的position。 ? ? Transform 組件用于描述物體在空間中的狀態(tài),它包括 位置(position), 旋轉(zhuǎn)(rotation)和 縮放(scale)。 其實所有的移動都會導(dǎo)致position的改變,這里所說的通過Transform組件來移

    2024年02月12日
    瀏覽(23)
  • 【Unity入門】Input.GetAxis(““)控制物體移動、旋轉(zhuǎn)

    Input.GetAxis(“”) 是 Unity 引擎中的一個方法,用于獲取游戲玩家在 鍵盤 或 游戲手柄 上輸入的某個軸(Axis)的值。這里的 “” 是一個字符串參數(shù),表示要獲取的軸的名稱。 在 Unity 中,有多種軸類型,如 “Horizontal”(水平軸)、“Vertical”(垂直軸)、“Mouse X”(鼠標(biāo)水平

    2024年01月17日
    瀏覽(22)
  • 【Unity】如何優(yōu)雅地移動物體-8個方法

    【Unity】如何優(yōu)雅地移動物體-8個方法

    在游戲開發(fā)中,如何移動物體?是我們需要思考的事情。 Unity 引擎也提供了眾多的方法,每個開發(fā)者的使用習(xí)慣也各不相同,所以往往不是很清楚在這種場景下哪種方式最好的或者最有效的。 那么,這篇文章,我想分享一下移動物體的一些方法和優(yōu)缺點。 倉庫地址 如何優(yōu)雅

    2023年04月09日
    瀏覽(30)
  • Unity 通過鍵盤鼠標(biāo)控制物體移動、旋轉(zhuǎn)、縮放的方法

    在Unity中,使用鍵盤ADWS鍵控制物體移動,通過鼠標(biāo)左鍵控制物體旋轉(zhuǎn),鼠標(biāo)中鍵控制物體縮放是再常見不過的方法。 方法如下: ?效果如下:Unity 通過鍵盤鼠標(biāo)控制物體移動、旋轉(zhuǎn)、縮放_嗶哩嗶哩_bilibili

    2024年02月03日
    瀏覽(24)
  • 【Unity自制手冊】基于Unity中物體移動相關(guān)方法和API集錦(動圖詳解)

    【Unity自制手冊】基于Unity中物體移動相關(guān)方法和API集錦(動圖詳解)

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unity每日一記 ?相關(guān)文章: 線性差值函數(shù)以及平滑阻尼的運用和實踐(Lerp AND SmoothDamp) ?相關(guān)文章:基礎(chǔ)不牢,地動山搖系列 ------ 軟

    2024年01月16日
    瀏覽(63)
  • Unity 語法詳解之查找游戲物體的方法(含查找隱藏物體)

    Unity 語法詳解之查找游戲物體的方法(含查找隱藏物體)

    為了更好的看懂,有一個非?;A(chǔ)的知識,如果不知道可以移步去了解一下哦 unity | gameobject和transform的區(qū)別和關(guān)聯(lián)通俗解釋_gameobject transform_菌菌巧樂茲的博客-CSDN博客 一、前情提要 大寫的 GameObject是個類,里面寫滿了物體有關(guān)的代碼 小寫的 gameObject指的是物體本身 大寫的

    2024年02月12日
    瀏覽(22)
  • [Unity] 使用Mathf函數(shù)實現(xiàn)平滑移動物體的7種方法

    [Unity] 使用Mathf函數(shù)實現(xiàn)平滑移動物體的7種方法

    ?Unity中要利用Mathf中的函數(shù)實現(xiàn)物體的平滑運動,有以下7種方法: Mathf.SmoothDamp、Mathf.Lerp、Mathf.SmoothStep三個方法非常相似,分別使用三個方法移動同一個物體的效果如圖所示: 可以看出,三者均是先快后慢,但SmoothDamp方法會有一些卡頓;SmoothStep與Lerp比較起來,Mathf.Smooth

    2024年02月12日
    瀏覽(18)
  • 【筆記】Unity2D角色和物體移動的幾種方法

    在Unity中對于物體移動有多種方法,這里根據(jù)b站up主【鼓勵Jun】的視頻整理了一些筆記 變量聲明: 位移向量var dir=new Vector3(deltax.deltay,deltaz); 移動速度var speed=2; ps:變量聲明都在主要都在方法外,實際位移操作則在Update方法中。 #鍵盤輸入,這里舉一個只x軸上移動的例子,y軸同

    2023年04月08日
    瀏覽(21)
  • Unity之獲取游戲物體對象或組件的幾個方法

    在unity的實際項目開發(fā)中,往往都要獲取游戲內(nèi)的各種物體,比如玩家(Player),怪物(Monster),或者其他,那有什么方法可以快速獲取呢,下面就來介紹unity獲取游戲?qū)ο蟮膸讉€方法 GameObject.Find GameObject.Find 通過游戲物體的名稱獲取對象 使用方法 缺點: 會遍歷當(dāng)前整個場

    2024年02月01日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包