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

Unity控制相機(jī)旋轉(zhuǎn)、移動、縮放等功能

這篇具有很好參考價值的文章主要介紹了Unity控制相機(jī)旋轉(zhuǎn)、移動、縮放等功能。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Unity控制相機(jī)旋轉(zhuǎn)、移動、縮放等功能


提示: 該腳本允許你以指定的速度和角度圍繞模型進(jìn)行相機(jī)旋轉(zhuǎn),并可以控制相機(jī)的移動和縮放

操作說明

將該腳本添加到一個游戲?qū)ο笊希⑵渥鳛橹鲾z像機(jī)。

1、在Unity編輯器中,你可以在腳本的參數(shù)變量部分調(diào)整相機(jī)的速度、縮放和移動等設(shè)置。根據(jù)需求,修改各個參數(shù)的值。

2、如果需要使相機(jī)跳轉(zhuǎn)到指定的模型位置,可以使用MoveToMod(string modName)方法。在調(diào)用該方法時,傳入目標(biāo)模型的名稱作為參數(shù)。相機(jī)將會立即跳轉(zhuǎn)到該模型的位置。

3、如果想讓相機(jī)圍繞指定模型以指定速度旋轉(zhuǎn)一定角度,可以使用CameraRotate(string modName, float xAngle, float yAngle, float zAngle, float velocity, bool follow)方法。在調(diào)用該方法時,傳入目標(biāo)模型的名稱、x軸旋轉(zhuǎn)角度、y軸旋轉(zhuǎn)角度、z軸旋轉(zhuǎn)角度、旋轉(zhuǎn)速度和是否跟隨模型旋轉(zhuǎn)的參數(shù)。相機(jī)將會以指定的速度逐漸旋轉(zhuǎn)至目標(biāo)角度。

4、如果需要限制相機(jī)的移動范圍,可以根據(jù)參數(shù)變量部分的移動限制設(shè)置來調(diào)整xMaxMove、xMinMove、yMaxMove、yMinMove、zMaxMove和zMinMove的值。相機(jī)將不能超出這些范圍進(jìn)行移動。

參數(shù)變量

xSpeed和ySpeed:相機(jī)旋轉(zhuǎn)的速度。
wheelSpeed:相機(jī)縮放的速度。
xMoveSpeed和yMoveSpeed:相機(jī)移動的速度。
isUnlimitedScale:是否無限制放大,但仍受移動限制所規(guī)定的范圍影響。
distance:鏡頭與中心點之間的距離,在isUnlimitedScale為true時有效。
isCameraMovementAllowed、isCameraRotationAllowed和isCameraZoomAllowed:是否允許移動、旋轉(zhuǎn)和縮放相機(jī)。
isPositionLimitEnabled:是否開啟位置限制。
maxZoom和minZoom:縮放的最大和最小限制。
xMaxMove、xMinMove、yMaxMove、yMinMove、zMaxMove和zMinMove:移動的限制。

公共方法

MoveToMod(string modName):使相機(jī)跳轉(zhuǎn)到指定模型。
CameraRotate(string modName, float xAngle, float yAngle, float zAngle, float velocity, bool follow):使相機(jī)以指定速度圍繞指定模型旋轉(zhuǎn)一定角度。

私有方法

AnimateCameraRotation(float targetX, float targetY, float targetZ, float velocity, bool follow):執(zhí)行相機(jī)旋轉(zhuǎn)動畫的協(xié)程。
UpdateCameraPosition():更新相機(jī)的位置。
MoveCameraSideways(float mouseX):更新相機(jī)的橫向平移。
MoveCameraUpwards(float mouseY):更新相機(jī)的縱向平移。
UpdateCameraRotation():更新相機(jī)的旋轉(zhuǎn)。
UpdateCameraZoom():更新相機(jī)的縮放。

Unity回調(diào)方法

Start():在腳本開始時獲取當(dāng)前物體的Transform作為中心點物體。
Update():每幀更新相機(jī)的位置、旋轉(zhuǎn)和縮放。

操作:
按住鼠標(biāo)右鍵并拖動鼠標(biāo)來旋轉(zhuǎn)相機(jī)。
按住鼠標(biāo)中鍵并拖動鼠標(biāo)來移動相機(jī)。
使用鼠標(biāo)滾輪來縮放相機(jī)。
長按shift鏡頭上移
長按ctrl鏡頭下移文章來源地址http://www.zghlxwxcb.cn/news/detail-761805.html

using UnityEngine;

public class Rotation : MonoBehaviour
{
    // -----  參數(shù)變量 -----

    [Header("旋轉(zhuǎn)速度")]
    public float xSpeed = 125.0f;
    public float ySpeed = 60.0f;

    [Header("縮放速度")]
    public float wheelSpeed = 50;

    [Header("移動速度")]
    public float xMoveSpeed = 200;
    public float yMoveSpeed = 200;

    [Header("是否無限制放大,但仍舊會受移動限制所規(guī)定的范圍")]
    public bool isUnlimitedScale = true;

    [Header("鏡頭與中心點距離,在 isUnlimitedScale 變量為 true 時有效")]
    public float distance = 30;

    [Header("是否允許移動相機(jī)")]
    public bool isCameraMovementAllowed = true;

    [Header("是否允許旋轉(zhuǎn)相機(jī)")]
    public bool isCameraRotationAllowed = true;

    [Header("是否允許縮放相機(jī)")]
    public bool isCameraZoomAllowed = true;

    [Header("是否開啟位置限制")]
    public bool isPositionLimitEnabled = true;

    [Header("縮放限制,最大,最小")]
    public float maxZoom = 300;
    public float minZoom = 8;

    [Header("移動限制")]
    public float xMaxMove = 94;
    public float xMinMove = -94;
    public float yMaxMove = 58;
    public float yMinMove = 1;
    public float zMaxMove = 44;
    public float zMinMove = -44;

    // ----- 內(nèi)部變量 -----

    private Transform tanks; // 中心點物體
    private Quaternion rotation; // 角度控制

    // ----- 公共方法 -----

    // 使相機(jī)跳轉(zhuǎn)到模型
    public bool MoveToMod(string modName)
    {
        if (string.IsNullOrEmpty(modName))
            return false;

        Transform newTransform = GameObject.Find(modName)?.transform;

        if (newTransform != null)
        {
            tanks.position = newTransform.position;
            return true;
        }
        else
        {
            return false;
        }
    }

    // 使相機(jī)以指定速度圍繞指定模型旋轉(zhuǎn)一定角度
    public void CameraRotate(string modName, float xAngle, float yAngle, float zAngle, float velocity, bool follow)
    {
        MoveToMod(modName);

        // 設(shè)置旋轉(zhuǎn)角度
        float targetX = transform.eulerAngles.x + xAngle;
        float targetY = transform.eulerAngles.y + yAngle;
        float targetZ = transform.eulerAngles.z + zAngle;

        // 開啟協(xié)程執(zhí)行動畫
        StartCoroutine(AnimateCameraRotation(targetX, targetY, targetZ, velocity, follow));
    }

    // ----- 私有方法 -----

    // 協(xié)程,執(zhí)行相機(jī)旋轉(zhuǎn)動畫
    private System.Collections.IEnumerator AnimateCameraRotation(float targetX, float targetY, float targetZ, float velocity, bool follow)
    {
        float animationSpeed = velocity;

        while (true)
        {
            float step = animationSpeed * Time.deltaTime;

            // 逐漸旋轉(zhuǎn)至目標(biāo)角度
            transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(targetX, targetY, targetZ), step);

            if (follow)
                tanks.rotation = transform.rotation;

            yield return null;
        }
    }

    // 更新相機(jī)的位置
    private void UpdateCameraPosition()
    {
        if (!isCameraMovementAllowed || !Input.GetMouseButton(2))
            return;

        float mouseX = Input.GetAxis("Mouse X");
        float mouseY = Input.GetAxis("Mouse Y");

        // 橫向平移
        MoveCameraSideways(mouseX);

        // 縱向平移,若相機(jī)垂直地面則向前平移
        MoveCameraUpwards(mouseY);
    }

    // 更新相機(jī)的橫向平移
    private void MoveCameraSideways(float mouseX)
    {
        transform.Translate(Vector3.right * xMoveSpeed * Time.deltaTime * -mouseX);
        tanks.Translate(Vector3.right * xMoveSpeed * Time.deltaTime * -mouseX);
    }

    // 更新相機(jī)的縱向平移
    private void MoveCameraUpwards(float mouseY)
    {
        transform.Translate(Vector3.up * yMoveSpeed * Time.deltaTime * -mouseY);
        tanks.Translate(Vector3.up * yMoveSpeed * Time.deltaTime * -mouseY);
    }

    // 更新相機(jī)的旋轉(zhuǎn)
    private void UpdateCameraRotation()
    {
        if (!isCameraRotationAllowed || !Input.GetMouseButton(1))
            return;

        float mouseX = Input.GetAxis("Mouse X");
        float mouseY = Input.GetAxis("Mouse Y");

        // 設(shè)置橫向旋轉(zhuǎn)距離
        float x = transform.eulerAngles.x + mouseY * xSpeed * 0.02f;

        // 設(shè)置縱向旋轉(zhuǎn)距離
        float y = transform.eulerAngles.y + mouseX * ySpeed * 0.02f;

        rotation = Quaternion.Euler(y, x, transform.eulerAngles.z);

        transform.rotation = rotation;
    }

    // 更新相機(jī)的縮放
    private void UpdateCameraZoom()
    {
        if (!isCameraZoomAllowed)
            return;

        if (isUnlimitedScale)
        {
            float scrollDelta = Input.GetAxis("Mouse ScrollWheel");

            // 方塊與相機(jī)保持相應(yīng)距離
            distance += scrollDelta * wheelSpeed;
        }
        else
        {
            float scrollDelta = Input.GetAxis("Mouse ScrollWheel");

            if ((scrollDelta < 0 || distance > minZoom) && (scrollDelta > 0 || distance < maxZoom) || !isPositionLimitEnabled)
            {
                distance += scrollDelta * wheelSpeed;
            }
        }

        rotation = Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, 0);
        transform.position = rotation * new Vector3(0.0f, 0.0f, -distance) + tanks.position;
    }

    // ----- Unity 回調(diào)方法 -----

    private void Start()
    {
        tanks = transform; // 使用當(dāng)前物體的 Transform,而不是尋找名為 "Main Camera" 的對象
    }

    private void Update()
    {
        UpdateCameraPosition();
        UpdateCameraRotation();
        UpdateCameraZoom();
    }
}

到了這里,關(guān)于Unity控制相機(jī)旋轉(zhuǎn)、移動、縮放等功能的文章就介紹完了。如果您還想了解更多內(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-第三人稱攝像機(jī)簡單腳本(包括跟隨、視角旋轉(zhuǎn)、滾輪縮放)

    本菜鳥為了實現(xiàn)第三人稱視角攝像機(jī)的主要功能,踩了很多意料之外的坑,終于搞出一份自覺完美的腳本,分享一下。 功能:攝像機(jī)跟隨、鼠標(biāo)滾輪縮放視野、長按鼠標(biāo)右鍵左右旋轉(zhuǎn)視野、長按鼠標(biāo)中鍵上下旋轉(zhuǎn)視野。 此腳本掛接在攝像機(jī)上,有詳細(xì)注釋,可直接運行。

    2024年02月08日
    瀏覽(310)
  • Unity攝像機(jī)旋轉(zhuǎn)與移動腳本實現(xiàn)

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

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

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

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

    2024年02月08日
    瀏覽(41)
  • Unity【角色/攝像機(jī)移動控制】【3.攝像機(jī)跟隨角色】

    本章代碼基于前兩章。 1. 我們新建CameraController腳本,將其掛載到Camera上 2. 在角色Player下新建一個空物體,命名為cameraTargetPoint,并將該物體掛載至CameraController腳本中【注意代碼中的這行:public Transform cameraTargetPoint;】,將該空物體放在人物頭部附近位置 3.將PlayerController腳本

    2024年02月22日
    瀏覽(35)
  • Unity丨移動相機(jī)朝向目標(biāo)并確定目標(biāo)在攝像機(jī)可視范圍內(nèi)丨攝像機(jī)注釋模型丨攝像機(jī)移動丨不同尺寸模型優(yōu)化丨

    Unity丨移動相機(jī)朝向目標(biāo)并確定目標(biāo)在攝像機(jī)可視范圍內(nèi)丨攝像機(jī)注釋模型丨攝像機(jī)移動丨不同尺寸模型優(yōu)化丨

    本文提供的功能是攝像機(jī)朝向目標(biāo)移動,并確定整個目標(biāo)出現(xiàn)在攝像機(jī)視角內(nèi),針對不同尺寸的模型優(yōu)化。 提示:這里可以添加技術(shù)名詞解釋 直接上代碼 后期可擴(kuò)展功能:類似點擊目標(biāo)完成視角移動等。

    2024年02月07日
    瀏覽(33)
  • Unity 控制攝像機(jī)鏡頭的上下左右移動

    ? ? ? ? private float FollowPosx,FollowPosy; ? ? private float moveAmount=5; ? //控制鏡頭的移動速度 ? ? // Update is called once per frame ? ? void Update() ? ? { ? ? ? ? if (Input.mousePosition.y Screen.height * 0.9)//如果鼠標(biāo)位置在頂部,就向上移動 ? ? ? ? { ? ? ? ? ? ? FollowPosy += moveAmount * Time.delta

    2024年02月11日
    瀏覽(25)
  • Unity【角色/攝像機(jī)移動控制】【2.角色跟隨鼠標(biāo)轉(zhuǎn)向】

    本章代碼實現(xiàn)基于本系列的【1.角色移動】 在前面的基礎(chǔ)上,我們在PlayerController腳本中添加如下函數(shù),隨后在update方法中調(diào)用即可: 其中mouseSensitivity是前面自定義的一個float變量,用來調(diào)節(jié)對鼠標(biāo)轉(zhuǎn)向速度,至此,當(dāng)我們轉(zhuǎn)動鼠標(biāo),角色也會跟著轉(zhuǎn)動

    2024年02月22日
    瀏覽(19)
  • Unity鼠標(biāo)控制3D物體的移動、旋轉(zhuǎn)、縮放

    1.使用協(xié)程 2.鼠標(biāo)左鍵控制物體移動,鼠標(biāo)碰到物體,物體顏色改變 1. 控制物體左右旋轉(zhuǎn),上下旋轉(zhuǎn) 2. 控制攝像機(jī)以物體為中心旋轉(zhuǎn) 腳本掛載到攝像機(jī)上 1. 基于物體本身的Transform的縮放 2. 基于攝像機(jī)的遠(yuǎn)近的縮放 腳本掛載到攝像機(jī)上

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

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

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

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

    2024年02月11日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包