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

Unity3D攝像機,鍵盤控制前后左右上下移動,鼠標控制旋轉(zhuǎn)、放縮

這篇具有很好參考價值的文章主要介紹了Unity3D攝像機,鍵盤控制前后左右上下移動,鼠標控制旋轉(zhuǎn)、放縮。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Unity3D中運行場景時,實現(xiàn)攝像機的前、后、左、右、上、下,以及鼠標滾輪的放縮,鼠標右鍵的旋轉(zhuǎn)操作。親測有效,可供參考。
按鍵功能介紹:W——前;S——后;A——左;D——右;Q——下降;E——上升;鼠標右鍵——旋轉(zhuǎn);鼠標滾輪——放縮。
Tourcamera腳本需要掛在攝像機組件上。
在攝像機組件中還需要添加“Physics Raycaster”組件。文章來源地址http://www.zghlxwxcb.cn/news/detail-504811.html

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Tourcamera : MonoBehaviour
{
    public Transform tourCamera;
    #region 相機移動參數(shù)
    public float moveSpeed = 1.0f;
    public float rotateSpeed = 90.0f;
    public float shiftRate = 2.0f;// 按住Shift加速
    public float minDistance = 0.5f;// 相機離不可穿過的表面的最小距離(小于等于0時可穿透任何表面)
    #endregion

    #region 運動速度和其每個方向的速度分量
    private Vector3 direction = Vector3.zero;
    private Vector3 speedForward;
    private Vector3 speedBack;
    private Vector3 speedLeft;
    private Vector3 speedRight;
    private Vector3 speedUp;
    private Vector3 speedDown;
    #endregion
    void Start()
    {
        if (tourCamera == null) tourCamera = gameObject.transform;
        // 防止相機邊緣穿透
        //if (tourCamera.GetComponent<Camera>().nearClipPlane > minDistance / 3)
        //{
        //    tourCamera.GetComponent<Camera>().nearClipPlane /= 3;
        //}
    }
    void Update()
    {
        GetDirection();
        // 檢測是否離不可穿透表面過近
        RaycastHit hit;
        while (Physics.Raycast(tourCamera.position, direction, out hit, minDistance))
        {
            // 消去垂直于不可穿透表面的運動速度分量
            float angel = Vector3.Angle(direction, hit.normal);
            float magnitude = Vector3.Magnitude(direction) * Mathf.Cos(Mathf.Deg2Rad * (180 - angel));
            direction += hit.normal * magnitude;
        }
        tourCamera.Translate(direction * moveSpeed * Time.deltaTime, Space.World);
    }
    private void GetDirection()
    {
        #region 加速移動
        if (Input.GetKeyDown(KeyCode.LeftShift)) moveSpeed *= shiftRate;
        if (Input.GetKeyUp(KeyCode.LeftShift)) moveSpeed /= shiftRate;
        #endregion

        #region 鍵盤移動
        // 復位
        speedForward = Vector3.zero;
        speedBack = Vector3.zero;
        speedLeft = Vector3.zero;
        speedRight = Vector3.zero;
        speedUp = Vector3.zero;
        speedDown = Vector3.zero;
        // 獲取按鍵輸入
        if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W)) speedForward = tourCamera.forward;
        if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S)) speedBack = -tourCamera.forward;
        if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A)) speedLeft = -tourCamera.right;
        if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D)) speedRight = tourCamera.right;
        if (Input.GetKey(KeyCode.E)) speedUp = Vector3.up;
        if (Input.GetKey(KeyCode.Q)) speedDown = Vector3.down;
        direction = speedForward + speedBack + speedLeft + speedRight + speedUp + speedDown;
        #endregion

        #region 鼠標旋轉(zhuǎn)
        if (Input.GetMouseButton(1))
        {
            // 轉(zhuǎn)相機朝向
            tourCamera.RotateAround(tourCamera.position, Vector3.up, Input.GetAxis("Mouse X") * rotateSpeed * Time.deltaTime);
            tourCamera.RotateAround(tourCamera.position, tourCamera.right, -Input.GetAxis("Mouse Y") * rotateSpeed * Time.deltaTime);
            // 轉(zhuǎn)運動速度方向
            direction = V3RotateAround(direction, Vector3.up, Input.GetAxis("Mouse X") * rotateSpeed * Time.deltaTime);
            direction = V3RotateAround(direction, tourCamera.right, -Input.GetAxis("Mouse Y") * rotateSpeed * Time.deltaTime);
        }
        #endregion

        #region 鼠標滾輪效果
        if (Input.GetAxis("Mouse ScrollWheel") < 0)
        {
            if (Camera.main.fieldOfView <= 100)
                Camera.main.fieldOfView += 2;
            if (Camera.main.orthographicSize <= 20)
                Camera.main.orthographicSize += 0.5F;
        }
        //Zoom in
        if (Input.GetAxis("Mouse ScrollWheel") > 0)
        {
            if (Camera.main.fieldOfView > 2)
                Camera.main.fieldOfView -= 2;
            if (Camera.main.orthographicSize >= 1)
                Camera.main.orthographicSize -= 0.5F;
        }
        #endregion
    }

    public Vector3 V3RotateAround(Vector3 source, Vector3 axis, float angle)
    {
        Quaternion q = Quaternion.AngleAxis(angle, axis);// 旋轉(zhuǎn)系數(shù)
        return q * source;// 返回目標點
    }
}


到了這里,關(guān)于Unity3D攝像機,鍵盤控制前后左右上下移動,鼠標控制旋轉(zhuǎn)、放縮的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【Unity3D】正交視圖與透視視圖 ( 正交視圖概念 | 透視視圖概念 | 觀察點 | 正交視圖作用 | 攝像機廣角設(shè)定 | 透視畸變效果 )

    【Unity3D】正交視圖與透視視圖 ( 正交視圖概念 | 透視視圖概念 | 觀察點 | 正交視圖作用 | 攝像機廣角設(shè)定 | 透視畸變效果 )

    透視視圖 ( Perspective View ) : 近大遠小 , 符合正常人眼觀察 3D 世界的規(guī)律 ; 近大 : 物體 距離 觀察點 ( 視點 ) 比較近時 , 顯示效果比較大 ; 遠小 : 物體 距離 觀察點 ( 視點 ) 比較遠時 , 顯示效果比較小 ; 下圖就是利用了 透視視圖 原理 , 照像機離鳥很近 , 離人很遠 ; 在 Unity 編輯

    2024年01月16日
    瀏覽(30)
  • 【Overload游戲引擎細節(jié)分析】鼠標鍵盤控制攝像機原理

    在上文中分析了攝像機類的實現(xiàn),在計算投影視圖矩陣時需要給攝像機輸入其位置及轉(zhuǎn)動四元數(shù)。這兩個量一般通過鼠標鍵盤來控制,從而達到控制攝像機的目的。本文分析一下其控制原理。 Overload的攝像機控制實現(xiàn)在類CameraController中,其有三個個方法HandleCameraPanning、Hand

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

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

    2024年02月22日
    瀏覽(35)
  • 【UE5 智慧城市系列】5-通過鼠標鍵盤控制攝像機

    【UE5 智慧城市系列】5-通過鼠標鍵盤控制攝像機

    通過鼠標WASD鍵控制攝像機前后左右移動,鼠標滾輪控制彈簧臂長度的修改,鼠標中鍵控制攝像機旋轉(zhuǎn)。 1. 首先創(chuàng)建一個游戲模式,這里命名為“BP_GameMode” 2. 再創(chuàng)建一個玩家控制器,這里命名為“BP_PlayerController” 3. 新建一個玩家控制的Pawn,這里命名為“BP_CameraPawn” 4. 打開

    2024年02月09日
    瀏覽(24)
  • Unity3D實現(xiàn)鍵盤控制小車左右方向旋轉(zhuǎn)

    Unity3D實現(xiàn)鍵盤控制小車左右方向旋轉(zhuǎn)

    注:本文章是在已學課程的基礎(chǔ)上實現(xiàn)的標題效果! 以下是學習控制物體旋轉(zhuǎn)的簡單方法: 代碼在updata()函數(shù)中實現(xiàn); ?transform:指本腳所掛載的物體的位置信息,包含Position(位置)、Rotation(旋轉(zhuǎn))、Scale(縮放),此處通過\\\".\\\"來調(diào)用Rotate方法; Rotate:unity手冊中描述如下,參數(shù)一:

    2024年01月18日
    瀏覽(32)
  • Unity 3D 人物移動朝向跟隨攝像機(第一人稱)

    Unity 3D 人物移動朝向跟隨攝像機(第一人稱)

    以人物身體旋轉(zhuǎn)控制鏡頭左右滑動 以攝像機旋轉(zhuǎn)控制鏡頭上下滑動 首先我們要知道 攝像機是作為人物的子物體的(充當眼睛) 所以當人物旋轉(zhuǎn)時 攝像機會跟隨它朝相同的方向旋轉(zhuǎn)相同的角度 從而達到 眼睛(攝像機)注視的方向一定是人物的正前方 那么這樣做有什么好處

    2024年02月21日
    瀏覽(25)
  • unity控制攝像機幾種視角實現(xiàn)方式

    unity控制攝像機幾種視角實現(xiàn)方式

    目錄 1、按下鼠標右鍵可以實現(xiàn)攝像機上下左右旋轉(zhuǎn) 2、自由視角 3、攝像頭跟隨視角 4、跟隨自由視角 5、第一人稱跟隨視角 python學習匯總連接: 1、按下鼠標右鍵可以實現(xiàn)攝像機上下左右旋轉(zhuǎn) 這段代碼定義了一個名為CameraRotate的腳本,用于控制攝像機根據(jù)鼠標右鍵(中鍵)

    2024年03月12日
    瀏覽(18)
  • Unity 控制攝像機鏡頭的上下左右移動

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

    2024年02月11日
    瀏覽(25)
  • unity控制攝像機跟隨玩家三種辦法

    unity控制攝像機跟隨玩家三種辦法

    將相機拖到人物的游戲?qū)ο笊希簿褪亲屜鄼C成為角色的子物體,這樣相機就會跟隨角色移動 但是這樣會存在問題 1.相機會隨著人物的翻轉(zhuǎn)而翻轉(zhuǎn) 2.相機跟隨人物沒有緩沖效果,移動比較僵硬 代碼方式控制相機跟隨人物移動,利用Lerp函數(shù)控制相機 1.在Unity中創(chuàng)建一個腳本F

    2024年02月16日
    瀏覽(39)
  • Unity角色或攝像機移動和旋轉(zhuǎn)的控制腳本

    Unity角色或攝像機移動和旋轉(zhuǎn)的控制腳本

    該腳本掛載到需要被移動、旋轉(zhuǎn)控制的物體身上,也可以之間掛在到攝像機上! 掛載到攝像機上可以實現(xiàn)第一人稱視角控制! 掛載到物體身上,配合攝像機跟蹤腳本可以實現(xiàn),第三人稱視角控制!? 將角色控制腳本掛給攝像機即可! 以下是角色控制腳本: 將上面, 角色控

    2024年02月06日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包