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

Unity相機(jī)自由移動(dòng)腳本

這篇具有很好參考價(jià)值的文章主要介紹了Unity相機(jī)自由移動(dòng)腳本。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

實(shí)現(xiàn)WSAD移動(dòng)方向,鼠標(biāo)右鍵旋轉(zhuǎn)角度,滾輪實(shí)現(xiàn)縮放

在此之前,我們先講清楚幾個(gè)比較容易混淆的點(diǎn):

1:Transform.forward是Transform組件的一個(gè)Vector3類(lèi)型的屬性,代表游戲?qū)ο笤谑澜缱鴺?biāo)系中的朝向,即“前方向”,它的值是(0,0,1),它表示了一個(gè)對(duì)象的X軸方向,一般用于計(jì)算游戲?qū)ο笄斑M(jìn)的方向,比如用于移動(dòng)、旋轉(zhuǎn)和射線檢測(cè)等場(chǎng)景。

2:Transform.Right的數(shù)學(xué)表達(dá)式是(1, 0, 0)。它表示了一個(gè)對(duì)象的X軸方向,或者說(shuō)是它的右側(cè)方向

值得注意的是,它們都是單位向量,一般只用于方向計(jì)算

3:Input.GetAxis("Horizontal")和Input.GetAxis("Vertical"),input.GetAxis("Mouse X")

它們是分別獲取水平方向輸入和豎直方向輸入的函數(shù),這個(gè)函數(shù)會(huì)返回一個(gè)范圍在-1到1之間的浮點(diǎn)數(shù),表示當(dāng)前水平方向上的輸入狀態(tài)

比如Input.GetAxis("Mouse X") 返回鼠標(biāo)在水平方向上的移動(dòng),以浮點(diǎn)數(shù)表示。當(dāng)鼠標(biāo)向右移動(dòng)時(shí),返回正值;當(dāng)鼠標(biāo)向左移動(dòng)時(shí),返回負(fù)值。如果鼠標(biāo)不動(dòng),返回0

Input.GetAxis("Mouse ScrollWheel"),向前滾動(dòng)是正數(shù),向后滾動(dòng)時(shí)負(fù)數(shù)

4:歐拉角和四元數(shù)

在unity中的rotation就是使用了歐拉角,歐拉角指的是以三個(gè)軸為基準(zhǔn),通過(guò)繞不同軸的旋轉(zhuǎn)角度來(lái)表示一個(gè)物體的旋轉(zhuǎn)狀態(tài),通常有XYZ、ZYX、ZXY等多種旋轉(zhuǎn)順序。但是,歐拉角會(huì)存在萬(wàn)向鎖問(wèn)題,即在某些特定情況下,兩個(gè)軸的旋轉(zhuǎn)會(huì)發(fā)生重合,導(dǎo)致旋轉(zhuǎn)計(jì)算異常

四元數(shù)則是通過(guò)四元數(shù)的定義和運(yùn)算來(lái)實(shí)現(xiàn)旋轉(zhuǎn),四元數(shù)實(shí)際上是一個(gè)四元組,包含了一個(gè)實(shí)部和三個(gè)虛部。它們的定義方式和歐拉角不同,可以避免萬(wàn)向鎖問(wèn)題,并且旋轉(zhuǎn)順序不會(huì)影響旋轉(zhuǎn)結(jié)果。四元數(shù)還可以通過(guò)插值運(yùn)算實(shí)現(xiàn)平滑旋轉(zhuǎn),適用于需要連續(xù)旋轉(zhuǎn)的情況。

我把代碼分成了三塊

第一個(gè)模塊是WSAD控制前后左右,這段比較簡(jiǎn)單,直接定義一個(gè)V3類(lèi)型的移動(dòng)方向,再使用Translate即可

第二個(gè)模塊是使用QE控制上下視角,定義一個(gè)變量upDown,每次按鍵時(shí)候改變1,然后直接把位置賦值到相機(jī)位置即可

第三個(gè)模塊是使用鼠標(biāo)右鍵進(jìn)行旋轉(zhuǎn),設(shè)置兩個(gè)旋轉(zhuǎn)向量rotateX,rotateY,Y方向旋轉(zhuǎn)限值minAngle和maxAngle,然后把向量和速度加到相機(jī)的歐拉角即可

有一個(gè)難點(diǎn),在剛開(kāi)始調(diào)試的時(shí)候,第一次點(diǎn)擊鼠標(biāo)右鍵進(jìn)行旋轉(zhuǎn)時(shí),屏幕一直跳動(dòng),最后經(jīng)過(guò)GPT的幫助,最終解決了問(wèn)題!愛(ài)死GPT

using UnityEngine;
public class CameraController : MonoBehaviour
{
    //WSAD相機(jī)移動(dòng)速度
    public float moveSpeed = 1.0f;
    //相機(jī)當(dāng)前移動(dòng)方向
    private Vector3 moveDirection;

    //QE相機(jī)的目標(biāo)高度
    private float upDistance;
    public float upSpeed = 0.2f;

    //鼠標(biāo)右鍵控制旋轉(zhuǎn)
    private float rotateX,rotateY;
    public float sensitivity =0.5f;
    //控制鼠標(biāo)在Y方向上的限值
    public float minAngle = -90f;
    public float maxAngle = 90f;
    //記錄之前的歐拉角,避免跳屏
    private Vector3 currentRotation,lastPosition;

    //鼠標(biāo)滾輪控制縮放
    public float zoomSpeed = 10f;
    private float zoomDistance = 0f;

    private void Start()
    {
            currentRotation = transform.eulerAngles;
    }
    void Update()
    {
        // 使用WSAD控制相機(jī)前后左右移動(dòng)比較簡(jiǎn)單,直接獲取當(dāng)前的移動(dòng)方向,然后使用Translate移動(dòng)即可
        {
            moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            transform.Translate(moveDirection * moveSpeed * Time.deltaTime);
        }

        //使用QE控制相機(jī)的上下,使用unDown參數(shù)進(jìn)行單位變化
        {
            if (Input.GetKey(KeyCode.Q))
            {
                upDistance -= upSpeed * Time.deltaTime;
                transform.Translate(transform.up * upDistance, Space.World);
            }
            else if(Input.GetKeyUp(KeyCode.Q))
            {
                upDistance = 0;
            }
            if (Input.GetKey(KeyCode.E))
            {
                upDistance += upSpeed * Time.deltaTime;
                transform.Translate(transform.up * upDistance, Space.World);
            }
            else if(Input.GetKeyUp(KeyCode.E))
            {
                upDistance = 0;
            }
        }

        //使用鼠標(biāo)右鍵來(lái)控制相機(jī)旋轉(zhuǎn)
        //Mouse X,向右移動(dòng)返回正值,Mouse Y,向上移動(dòng)鼠標(biāo)為正值
        {
            if (Input.GetMouseButtonDown(1))
            {
                // 記錄當(dāng)前的歐拉角
                //currentRotation = transform.eulerAngles;
                //記錄鼠標(biāo)位置
                lastPosition = Input.mousePosition;
            }
            if (Input.GetMouseButton(1))
            {
                //設(shè)置偏移量
                Vector3 offset = Input.mousePosition - lastPosition;
                rotateX += offset.x * sensitivity;
                rotateY -= offset.y * sensitivity;

                //給Y方向的旋轉(zhuǎn)加上限值函數(shù)
                rotateY = Mathf.Clamp(rotateY, minAngle, maxAngle);
                //改變當(dāng)前的歐拉角
                transform.eulerAngles = new Vector3(rotateY, rotateX, 0f);

                // 將保存的歐拉角重新賦值回去
                transform.eulerAngles += currentRotation;
                lastPosition = Input.mousePosition;
            }
        }
        //使用滾輪來(lái)控制物體的縮放
        {
            //獲取滾輪的滾動(dòng)幅度和方向
            zoomDistance += Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
            //使用限值函數(shù)來(lái)限定縮放的范圍
            zoomDistance = Mathf.Clamp(zoomDistance, -10f, 10f);
            //最后定位
            transform.position = transform.position + transform.forward * Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
        }
    }
}

直接將代碼復(fù)制,掛到Camera即可運(yùn)行!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-486377.html

到了這里,關(guān)于Unity相機(jī)自由移動(dòng)腳本的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Unity攝像機(jī)旋轉(zhuǎn)與移動(dòng)腳本實(shí)現(xiàn)

    ? ? ? ? 最近做項(xiàng)目經(jīng)常用到需要控制攝像機(jī)的地方,查閱了網(wǎng)上的方法后,以自己的需要寫(xiě)了一個(gè)這樣的功能。希望對(duì)碼友有所幫助 ? ? ? ?(本腳本放在攝像機(jī)上) ? ? ? ? 攝像機(jī)腳本功能: ? ? ? ? ? 1、通過(guò)鍵盤(pán)的WASD鍵控制攝像機(jī)的前后左右移動(dòng) ? ? ? ? ? 2、通過(guò)

    2024年02月13日
    瀏覽(91)
  • Unity3D相機(jī)圍繞物體自由旋轉(zhuǎn)

    Unity3D相機(jī)圍繞物體自由旋轉(zhuǎn)

    寫(xiě)了一個(gè)相機(jī)圍繞物體360°自由旋轉(zhuǎn)的腳本,比較實(shí)用,分享出來(lái)給大家使用,配置如下: Hierarchy界面 ?LookPovit:為物體Auto Aircraft的中心空對(duì)象; AroundPovit:用于相機(jī)的空對(duì)象,作為父類(lèi),主要作用是為了保持與被觀察物體的位置一致,可防止Auto Aircraft出現(xiàn)抖動(dòng)而影響相機(jī)

    2024年02月11日
    瀏覽(100)
  • Unity相機(jī)繞物體旋轉(zhuǎn)、視野縮放功能的c#腳本實(shí)現(xiàn)(模擬物品展臺(tái)功能),且相機(jī)參數(shù)可調(diào)

    為了實(shí)現(xiàn)照相機(jī)的物品展臺(tái)功能,查詢了網(wǎng)上各種各樣的方法,有的需要導(dǎo)入資源包什么的,覺(jué)得都比較復(fù)雜。 代碼部分參考了一位大佬的文章,這里附上文章鏈接。 ———————————————— 版權(quán)聲明:本文為CSDN博主「董豪強(qiáng)」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)

    2024年02月11日
    瀏覽(21)
  • 【Unity】簡(jiǎn)單案例腳本實(shí)現(xiàn) | 鼠標(biāo)觀察/鍵盤(pán)控制移動(dòng)飛行/行走/碰撞檢測(cè)

    【Unity】簡(jiǎn)單案例腳本實(shí)現(xiàn) | 鼠標(biāo)觀察/鍵盤(pán)控制移動(dòng)飛行/行走/碰撞檢測(cè)

    《Unity5實(shí)戰(zhàn)-使用C#和Unity開(kāi)發(fā)多平臺(tái)游戲》第二章-構(gòu)建一個(gè)讓你置身3D空間的演示 鼠標(biāo)觀察/鍵盤(pán)控制移動(dòng)飛行/行走/碰撞檢測(cè) Unity版本:2019.4.23f1c1 注意腳本名稱(chēng)和組件添加,不在文章中一一強(qiáng)調(diào) 場(chǎng)景模型都是在資源商店選擇的免費(fèi)下載(選擇Sort by Price(Low to High)排序)搜索

    2024年02月04日
    瀏覽(22)
  • Unity面向新手,如何使物體移動(dòng),讓物體自由的動(dòng)起來(lái)。幾種移動(dòng)方案講解

    Unity面向新手,如何使物體移動(dòng),讓物體自由的動(dòng)起來(lái)。幾種移動(dòng)方案講解

    在大部分的Unity游戲開(kāi)發(fā)中,移動(dòng)是極其重要的一部分,移動(dòng)的手感決定著游戲的成敗,一個(gè)優(yōu)秀的移動(dòng)手感無(wú)疑可以給游戲帶來(lái)非常舒服的體驗(yàn)。而Unity中有多種移動(dòng)方法,使用Transform,使用剛體Rigidbody,使用CharacterController,使用NavMesh導(dǎo)航系統(tǒng)等等等等。當(dāng)然,對(duì)于新手來(lái)

    2024年02月08日
    瀏覽(26)
  • Unity之手游UI的點(diǎn)擊和方向移動(dòng)

    Unity之手游UI的點(diǎn)擊和方向移動(dòng)

    一 Button的點(diǎn)擊 1.1 新建UI - Button 1.2? 在Button上面右擊添加空物體 1.3? 創(chuàng)建腳本掛載到空物體上面 ?腳本內(nèi)容添加點(diǎn)擊方法,來(lái)控制物體的顯示隱藏 1.4 按鈕上On Click的位置關(guān)聯(lián)空物體,并選擇空物體的腳本方法OnMyClick() 1.5 運(yùn)行后就可能控制物體顯示隱藏了 二 方向鍵控制移 動(dòng)

    2024年01月21日
    瀏覽(27)
  • unity通過(guò)腳本實(shí)現(xiàn)漫游功能 wasd控制玩家移動(dòng),空格跳躍,鼠標(biāo)控制視野旋轉(zhuǎn),滑輪控制鏡頭伸縮

    將場(chǎng)景中的攝像機(jī)刪除,在玩家的控制面板中添加Camera組件,和rigibody組件 ? using System.Collections; using System.Collections.Generic; using UnityEngine; public class move : MonoBehaviour { ? ? public float speed; ? ? Rigidbody rigid; ? ? void Start() ? ? { ? ? ? ? ? ? ? ? rigid = GetComponentRigidbody(); ? ? } ?

    2024年02月10日
    瀏覽(26)
  • Unity之物體觸碰墻面后隨機(jī)方向移動(dòng)

    Unity之物體觸碰墻面后隨機(jī)方向移動(dòng)

    目錄 一、效果圖 二、腳本思路 1.隨機(jī)方向 ?2.物體移動(dòng) 3.墻壁檢測(cè) 三、界面布局 利用父物體旋轉(zhuǎn)移動(dòng)會(huì)影響其子物體的特性制作,在場(chǎng)景中創(chuàng)建三個(gè)物體一個(gè)用于移動(dòng)的物體Obj,一個(gè)用于旋轉(zhuǎn)的“標(biāo)桿”物體 pole,一個(gè)是負(fù)責(zé)記錄方向的點(diǎn) Point 物體,其中Point是pole的父物體

    2024年02月15日
    瀏覽(18)
  • 【Unity】攝像機(jī)跟隨鼠標(biāo)移動(dòng)以物體為中心旋轉(zhuǎn) 物體根據(jù)視線方向移動(dòng)

    【Unity】攝像機(jī)跟隨鼠標(biāo)移動(dòng)以物體為中心旋轉(zhuǎn) 物體根據(jù)視線方向移動(dòng)

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

    2024年02月08日
    瀏覽(41)
  • Unity3D方向鍵控制人物移動(dòng)的代碼

    也可以換成 Translate 函數(shù)默認(rèn)模式是 Space.Self ,此時(shí)移動(dòng)方向需要為人物坐標(biāo)系下的人物前進(jìn)方向 Vector3(0, 0, 1) ;如果模式指定為 Space.World ,移動(dòng)方向應(yīng)該為世界坐標(biāo)系下的人物前進(jìn)方向 transform.forward , transform.forward 在人物轉(zhuǎn)向過(guò)程中會(huì)改變。如果不注意這個(gè)問(wèn)題,人物轉(zhuǎn)

    2024年02月11日
    瀏覽(34)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包