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

Unity之用代碼移動物體(平滑移動)

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

因為移動的起點和終點都是不確定,所以這里用代碼進行實現(xiàn)而不是動畫(試過動畫,但是發(fā)現(xiàn)無法成功添加clip)

物體移動常用的有兩個方法,一個是Mathf.MoveTowards,一個是Mathf.Lerp,他們都用于值的平滑過渡

  • Mathf.MoveTowards?
MoveTowards(float current, float target, float maxDelta);

????????current:起點位置

????????target:目標位置

????????maxDelta:每一幀變化的量

????????Mathf.MoveTowards:這個函數以固定的步長從當前值逐漸移向目標值。它提供了每幀最大的變化量,確保過渡是平滑的,但速度是固定的

  • Mathf.Lerp
Lerp(float a, float b, float t);

????????a:起點位置

? ? ? ? b:目標位置

? ? ? ? t:插值參數,取值范圍為0到1,表示要從a過渡到b的進度。

????????Mathf.Lerp:這個函數通過根據插值系數在兩個值之間進行線性插值來實現(xiàn)平滑過渡。它接受一個范圍在0到1之間的插值參數,可以通過調整該參數來控制過渡速度和效果

  • MoveToward和Lerp的區(qū)別

????????Mathf.MoveTowards:適用于需要按照固定速度進行平滑移動的場景,例如物體的平移、旋轉或縮放等。

????????Mathf.Lerp:適用于需要根據插值系數進行平滑過渡的場景,例如顏色的漸變、淡入淡出效果、相機的平滑跟隨等。

注意:不論是MoveToward還是Lerp,每次運行只會讓值變化一次,要讓物體實現(xiàn)平滑移動,需要將MoveToward和Lerp方法放進while循環(huán)語句中

   while (elapsedTime < moveDuration)
        {
            // 使用插值方法計算當前位置
            float t = elapsedTime / moveDuration;
            Vector3 newPosition = Vector3.Lerp(initialPosition, targetPosition, t);

            // 更新物體的位置
            transform.position = newPosition;

            // 等待一幀
            yield return null;

            // 更新已經經過的時間
            elapsedTime += Time.deltaTime;
        }

這里是用時間條件來限制,在持續(xù)時間內移動物體,速度會隨著路程的變長而加快,因為Lerp的插值參數是移動百分比,這樣物體就能平滑的移動了

  • 擴展

????????在unity中可以用Vector3.MoveTowards和Vector3.Lerp來實現(xiàn)物體的位移,這比用Mathf更加的方便,他是一個三維坐標的點對點移動,同時包含了xyz坐標的信息,如果是二維情況下可以用Vector2來代替

由于本人需要物體實現(xiàn)「這種轉向一次的移動,所以需要添加中間點,這里如果是用Mathf的方法,代碼就要復雜多了

Vector3 targetPosition1 = new Vector3(targetPosition2.x, startPosition.y, 0);

while (obj.transform.position != targetPosition1)//當前位置等于目標位置是跳出循環(huán)
        {
            float t = elapsedTime / moveDuration;

            Vector3 newPosition = Vector3.Lerp(startPosition, targetPosition1, t);

            obj.transform.position = newPosition;//新的位置要賦值給物體
            // 等待一幀
            yield return null;

            elapsedTime += Time.deltaTime;
            if(elapsedTime > 5f)
            {
                Debug.Log("移動物體進入死循環(huán)");
                break;
            }
        }

這里還用了協(xié)程實現(xiàn)了每次移動后等待一幀的操作,最后的if語句是為了防止進入死循環(huán),至此,一個讓物體移動的功能就實現(xiàn)了文章來源地址http://www.zghlxwxcb.cn/news/detail-729477.html

到了這里,關于Unity之用代碼移動物體(平滑移動)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • 1.Unity中c#代碼學習(讀取物體名稱+位置+移動)

    Ctrl + K + C 批量注釋 Ctrl + K + U 批量取消注釋 Debug.Log(\\\"**\\\");輸出“**”中內容 GameObject obj = this.gameObject; this表示當前指代的物品 GameObject表示游戲中物體 Debug.Log(\\\"** 物體名字:\\\" + this.gameObject.name); this.gameObject.name直接調用類名 string name = obj.name; string 是c#中的字符串類型 Debug.Log(\\\"**

    2023年04月11日
    瀏覽(41)
  • unity攝像機平滑移動旋轉

    Unity中使用Vector3.SmoothDamp(平滑阻尼)方法進行跟隨移動,可以使跟隨看起來很平滑,而不顯得突兀,最典型的示例就是相機平滑跟隨角色移動。 SmoothDamp (current : Vector3, target : Vector3, ref currentVelocity : Vector3, smoothTime ) ?

    2024年02月11日
    瀏覽(21)
  • Unity點擊物體后,移動到物體所在位置

    Unity點擊物體后,移動到物體所在位置

    腳本掛在被點擊的物體上 腳本掛在角色控制器上 改進:使用Raycast中的LayerMask 創(chuàng)建“cube”層 將想要被檢測的物體放入該層 3.1、 3D物體事件監(jiān)聽 在相機上掛Physics Raycaster組件 檢查是否有EventSystem 將腳本掛在被點擊的物體上 添加組件Event Trigger組件 3.2、 世界UI世界監(jiān)聽

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

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

    2024年02月12日
    瀏覽(23)
  • Unity中的物體移動

    局部坐標系(Transform.localPosition)是指當前物體相對于父物體的位置,會受到父物體的影響。 世界坐標系(Transform.Position)是指當前物體在世界空間坐標系中的位置,不受父物體影響。 若該物體有父類,則二者的關系為:該物體的世界坐標=該物體父類的世界坐標+該物體的局

    2024年02月03日
    瀏覽(35)
  • Unity 控制物體移動

    Unity 控制物體移動

    目錄 1、通過改變物體的位置使物體移動 2、通過給物體施加力使物體移動 3、移動characterController以及碰撞檢測 一、相關代碼展示 1、通過改變物體的位置使物體移動 2、通過給物體施加力使物體移動 3、移動characterController 以及碰撞檢測 注:使用時首先要給物體添加CharacterC

    2024年02月13日
    瀏覽(23)
  • unity物體移動至指定位置

    unity物體移動至指定位置

    在Unity中,物體的坐標分為 局部坐標 和 世界坐標 。 局部坐標是相對于物體的父對象的坐標系,而世界坐標是相對于場景的整體坐標系。 舉個例子 將下面代碼掛載到Sphere上 輸出結果如下 如果想讓物體運動到指定的位置,通常情況下是參考世界坐標系。因為世界坐標系是整

    2024年02月05日
    瀏覽(32)
  • unity UI 跟隨3D物體移動

    unity UI 跟隨3D物體移動

    ?

    2024年02月11日
    瀏覽(31)
  • 【Unity入門】物體5種移動方法

    利用修改Transform組件的position的兩種常用方法。 使用Translate()函數 直接指定新的位置 將上述兩種方法在 void Update()實現(xiàn)每一幀物體向x方向移動1.5個單位,具體代碼如下: 注意:此處1.5為啥要寫1.5f,根據C#的語法規(guī)定,直接寫1.5會被認為double類型的數,而這里需要flaot類

    2024年02月02日
    瀏覽(20)
  • 【Unity】攝像機跟隨鼠標移動以物體為中心旋轉 物體根據視線方向移動

    【Unity】攝像機跟隨鼠標移動以物體為中心旋轉 物體根據視線方向移動

    描述 實現(xiàn)攝像機根據鼠標移動跟隨物體旋轉,以攝像機前物體為中心,攝像機圍繞物體旋轉,并使攝像機時刻指向物體 實現(xiàn)效果 Unity 組件設置 Camera 組件設置 Body 組件設置 實現(xiàn)代碼 CameraRotateMove.cs 攝像機跟隨和旋轉 move_better.cs 物體根據按鍵移動

    2024年02月08日
    瀏覽(41)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包