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

unity腳本中的camera相關(guān)代碼

這篇具有很好參考價值的文章主要介紹了unity腳本中的camera相關(guān)代碼。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

unity腳本中的camera相關(guān)代碼

Camera相關(guān)代碼共有兩個腳本,包括CameraContral和Sample_move_Camera

CameraContral全部代碼展示

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

public class CameraContral : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

這是一個簡單的 Unity 腳本,名為 `CameraContral`,用于控制攝像機的行為。當前的代碼中,`Start` 方法和 `Update` 方法均為空,沒有具體的實現(xiàn)。

在 `Start` 方法中,你可以進行一次性的初始化,例如設(shè)置攝像機的初始位置、旋轉(zhuǎn)、或者獲取其他對象的引用。

在 `Update` 方法中,你可以編寫代碼以處理每一幀的邏輯。這可能包括玩家輸入的響應(yīng)、對象的移動、碰撞檢測等等。

Sample_move_Camera全部代碼展示

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;


public class Sample_move_Camera : MonoBehaviour
{
    public Camera mainCamera;

    public Transform mainCamerLocation;

    public float moveSpeed = 15f;
    public float zoomSpeed = 5f;

    private bool isDragging = false;
    private Vector3 initialMousePosition;
    private Vector3 initialCameraPosition;
    // Start is called before the first frame update
    void Start()
    {
        mainCamera.transform.position = mainCamerLocation.position;
        mainCamera.transform.rotation = mainCamerLocation.rotation;
        DOTween.Init();
    }

    // Update is called once per frame
    void Update()
    {
        SampleMoveControl();
        SampleScrollWheel();
        MouseDragWin();
    }

    void SampleMoveControl()
    {
        if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.UpArrow)) //前
        {
            this.transform.Translate(Vector3.up * moveSpeed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.S) | Input.GetKey(KeyCode.DownArrow)) //后
        {
            this.transform.Translate(Vector3.up * -moveSpeed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.LeftArrow)) //左
        {
            this.transform.Translate(Vector3.right * -moveSpeed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.D) | Input.GetKey(KeyCode.RightArrow)) //右
        {
            this.transform.Translate(Vector3.right * moveSpeed * Time.deltaTime);
        }
    }
    void SampleScrollWheel()
    {
        if (mainCamera.orthographic == true)
        {
            mainCamera.orthographicSize -= Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
        }
        else
        {
            mainCamera.fieldOfView -= Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
        }
    }
    void MouseDragWin()
    {
        if (Input.GetMouseButtonDown(2)) // 鼠標中鍵按下
        {
            isDragging = true;
            initialMousePosition = Input.mousePosition;
            initialCameraPosition = transform.position;
        }
        else if (Input.GetMouseButtonUp(2)) // 鼠標中鍵釋放
        {
            isDragging = false;
        }

        if (isDragging)
        {
            Debug.Log("is Dragging");
            Vector3 currentMousePosition = Input.mousePosition;
            Vector3 displacement = Camera.main.ScreenToWorldPoint(currentMousePosition)
                - Camera.main.ScreenToWorldPoint(initialMousePosition);
            transform.position = initialCameraPosition - displacement;
        }
    }
    public void MoveTo (GameObject target)
    {
        Vector3 targetPosition = target.transform.position + new Vector3(0,2250,0);
        this.transform.DOMove(targetPosition,0.25f);
    }
}

上述代碼是一個用于控制相機移動和交互的 Unity 腳本。以下是對代碼邏輯的簡要說明:

1. 初始化設(shè)置:
? ?- 在 `Start` 方法中,設(shè)置主相機的位置和旋轉(zhuǎn)為預(yù)定義的 `mainCamerLocation` 的位置和旋轉(zhuǎn)。
? ?- 初始化 DoTween 插件,用于實現(xiàn)平滑的物體移動效果。

2. 輸入檢測與相機移動:
? ?- 在 `Update` 方法中,每幀檢測用戶輸入和鼠標操作,包括鍵盤上的"WASD"和箭頭鍵控制相機的前后左右移動。
? ?- 如果用戶按下鼠標中鍵(中軸滾輪),則啟用拖拽模式,記錄初始鼠標位置和相機位置,并在拖拽時更新相機位置,實現(xiàn)鼠標中鍵拖拽相機的效果。

3. 滾輪縮放:
? ?- 在 `SampleScrollWheel` 方法中,根據(jù)相機是正交還是透視投影,使用鼠標滾輪的輸入調(diào)整相機的正交大小或透視視野,實現(xiàn)縮放效果。

4. 相機移動到目標位置:
? ?- 提供一個公共方法 `MoveTo`,用于將相機移動到指定的目標對象上方一定距離,使用 DoTween 插件實現(xiàn)平滑移動。

總體而言,這個腳本允許用戶通過鍵盤控制相機的移動,通過鼠標中鍵實現(xiàn)拖拽相機的功能,并通過鼠標滾輪實現(xiàn)相機的縮放。同時,提供了一個方法可以將相機移動到指定目標的上方,提供了平滑移動效果。

重點代碼段解釋:

代碼段一?

if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.UpArrow)) //前 
    {this.transform.Translate(Vector3.up * moveSpeed * Time.deltaTime);}

問:這里的input是什么意思

答:在這段代碼中,Input.GetKey(KeyCode.W)Input.GetKey(KeyCode.UpArrow) 是用于檢測鍵盤輸入的條件語句。

  • Input.GetKey(KeyCode.W) 表示檢測鍵盤上的"W"鍵是否被按下。
  • Input.GetKey(KeyCode.UpArrow) 表示檢測鍵盤上的上箭頭鍵是否被按下。

這兩個條件使用 | 運算符進行邏輯或操作,即只要其中一個條件為真,整個條件表達式就為真。所以,這段代碼的意思是:如果鍵盤上的"W"鍵或上箭頭鍵被按下,就執(zhí)行花括號中的代碼塊。

在這里,執(zhí)行的代碼是 this.transform.Translate(Vector3.up * moveSpeed * Time.deltaTime);,它的作用是將當前對象(腳本所附著的對象)沿著世界空間的Y軸方向移動一定距離,移動的距離取決于 moveSpeedTime.deltaTime。這通常用于實現(xiàn)相機或玩家角色的上移動作。

問:input是類嗎

答:在Unity中,Input 是一個靜態(tài)類,用于處理用戶輸入。它提供了一組靜態(tài)方法和屬性,讓開發(fā)者能夠輕松地獲取用戶的鍵盤、鼠標、觸摸屏等輸入。

具體而言,Input 類包含了一系列用于檢測輸入的靜態(tài)方法,如:

  • Input.GetKey(KeyCode key): 檢測鍵盤上的某個按鍵是否被按下。
  • Input.GetKeyDown(KeyCode key): 檢測鍵盤上的某個按鍵是否剛剛被按下。
  • Input.GetKeyUp(KeyCode key): 檢測鍵盤上的某個按鍵是否剛剛被釋放。
  • Input.GetAxis(string axisName): 獲取指定軸的輸入值,通常用于處理輸入設(shè)備的軸,比如鼠標滾輪或手柄搖桿。

這些方法允許開發(fā)者在腳本中根據(jù)用戶的輸入來執(zhí)行相應(yīng)的操作,例如移動、跳躍、攻擊等。 Input 類是 Unity 引擎中用于處理輸入的核心類之一。

問:this.transform.Translate(Vector3.up * moveSpeed * Time.deltaTime);是什么

答:this.transform.Translate 是一個 Unity 中用于移動物體的方法。讓我們分解這個表達式:

  • this: 表示當前腳本所附著的對象(即擁有這個腳本的對象)。
  • transform: 是 GameObject 類中的一個屬性,表示對象的變換組件。變換組件包含了有關(guān)對象的位置、旋轉(zhuǎn)和縮放的信息。
  • Translate(Vector3 translation): 是變換組件的方法,用于在當前對象的坐標系中移動物體。
  • Vector3.up: 是一個代表世界坐標 Y 軸方向的單位向量。
  • moveSpeed: 是移動的速度,用于確定移動的距離。
  • Time.deltaTime: 是上一幀到當前幀的時間間隔,用于使移動在不同幀之間平滑。

所以,這行代碼的效果是在每一幀中將對象沿著 Y 軸方向移動一個距離,使其產(chǎn)生一個平滑的移動效果。

代碼段二

void SampleScrollWheel()
    {
        if (mainCamera.orthographic == true)
        {
            mainCamera.orthographicSize -= Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
        }
        else
        {
            mainCamera.fieldOfView -= Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
        }
    }

問:解釋以上代碼

答:代碼解釋如下

void SampleScrollWheel()
{
    // 檢查主攝像機是否使用正交投影
    if (mainCamera.orthographic == true)
    {
        // 檢查主攝像機是否使用正交投影。如果是正交投影,表示相機的投影方式是平行投影;如果為 false,則相機使用透視投影。
        mainCamera.orthographicSize -= Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
    }
    else
    {
        // 如果是透視投影,則調(diào)整視野大小
        mainCamera.fieldOfView -= Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
    }
}

這段代碼的效果是根據(jù)鼠標滾輪的滾動來動態(tài)調(diào)整相機的正交投影大小或透視投影視野大小,從而實現(xiàn)縮放效果。

1.mainCamera.orthographic == true: 檢查主攝像機是否使用正交投影。如果是正交投影,表示相機的投影方式是平行投影;如果為 false,則相機使用透視投影。

2.如果相機使用正交投影 (orthographic == true),則通過 Input.GetAxis("Mouse ScrollWheel") 獲取鼠標滾輪的滾動值,并乘以 zoomSpeed,然后用這個值來調(diào)整正交投影的大小 (mainCamera.orthographicSize)。正交投影的大小決定了相機視口的大小。

3.如果相機使用透視投影 (orthographic == false),則同樣通過 Input.GetAxis("Mouse ScrollWheel") 獲取鼠標滾輪的滾動值,并乘以 zoomSpeed,然后用這個值來調(diào)整視野的大小 (mainCamera.fieldOfView)。視野大小影響了相機的可見范圍,即視野角度。

代碼段三

void MouseDragWin()
{
    if (Input.GetMouseButtonDown(2)) // 鼠標中鍵按下
    {
        // 記錄拖拽開始的狀態(tài)和位置
        isDragging = true;
        initialMousePosition = Input.mousePosition;
        initialCameraPosition = transform.position;
    }
    else if (Input.GetMouseButtonUp(2)) // 鼠標中鍵釋放
    {
        // 拖拽結(jié)束,重置拖拽狀態(tài)
        isDragging = false;
    }

    if (isDragging)
    {
        // 如果正在拖拽,執(zhí)行拖拽操作
        Debug.Log("is Dragging");

        // 獲取當前鼠標位置
        Vector3 currentMousePosition = Input.mousePosition;

        // 計算鼠標位移
        Vector3 displacement = Camera.main.ScreenToWorldPoint(currentMousePosition)
            - Camera.main.ScreenToWorldPoint(initialMousePosition);

        // 更新相機位置
        transform.position = initialCameraPosition - displacement;
    }
}

問:簡述上述代碼流程

答:以下是對上述代碼的簡要說明:

1.首先,檢測鼠標中鍵的按下和釋放事件,以確定是否開始或結(jié)束拖拽操作。
2.如果鼠標中鍵按下,則記錄拖拽開始的狀態(tài)和位置,并標記為正在拖拽。
3.如果鼠標中鍵釋放,則重置拖拽狀態(tài)為未拖拽。
4.如果正在拖拽,則獲取當前鼠標位置,并計算鼠標位移向量。
5.最后,根據(jù)鼠標的位移向量更新相機的位置,從而實現(xiàn)拖拽效果。

問:Debug.Log("is Dragging");

答:Debug.Log("is Dragging"); 是一個用于在 Unity 編輯器的控制臺輸出一條調(diào)試信息的語句。
???????Debug 是 Unity 引擎中的一個類,提供了一系列用于調(diào)試的方法。
? ? ? ?Log 是其中的一個方法,用于輸出日志信息。
在這行代碼中,如果鼠標中鍵被按下并且正在拖拽相機(isDragging 為 true),那么會輸出一條日志信息,內(nèi)容是 "is Dragging"。這樣做有助于在開發(fā)過程中追蹤程序的執(zhí)行流程和狀態(tài)。
在 Unity 編輯器中,你可以打開控制臺(Console)來查看這些日志信息。這對于調(diào)試程序、查找錯誤以及理解代碼執(zhí)行流程非常有用。一旦你在代碼中使用了 Debug.Log,你就可以在 Unity 編輯器中的控制臺看到相應(yīng)的輸出。

問:Vector3 currentMousePosition = Input.mousePosition;

答:Input.mousePosition是 Unity 中的一個屬性,用于獲取當前幀中鼠標的屏幕坐標位置。這個屬性返回一個 Vector3,其中 xy 分別表示鼠標在屏幕上的水平和垂直位置,而 z 通常為 0。

所以,這行代碼的作用是獲取當前幀中鼠標的屏幕坐標位置,并將其存儲在 currentMousePosition 變量中。在鼠標拖拽相機的情境下,這個坐標通常用于計算鼠標的位移,以便更新相機的位置。

問:Vector3 displacement = Camera.main.ScreenToWorldPoint(currentMousePosition) - Camera.main.ScreenToWorldPoint(initialMousePosition);

答:這行代碼的目的是計算鼠標在世界坐標中的位移。讓我逐步解釋:

Vector3 displacement = Camera.main.ScreenToWorldPoint(currentMousePosition) - Camera.main.ScreenToWorldPoint(initialMousePosition);

  1. Camera.main: 這是獲取場景中的主攝像機的快捷方式。如果場景中有多個攝像機,這可能需要根據(jù)具體情況調(diào)整。

  2. ScreenToWorldPoint(Vector3 position): 這是一個方法,用于將屏幕坐標轉(zhuǎn)換為世界坐標。它接受一個 Vector3 參數(shù),其中的 xy 表示屏幕上的點的水平和垂直位置,而 z 通常是攝像機到目標的距離。在這里,我們使用 currentMousePositioninitialMousePosition 作為輸入,分別表示鼠標當前位置和初始位置。這行代碼計算了兩個 Vector3 向量之間的差值,即 Camera.main.ScreenToWorldPoint(currentMousePosition) 減去 Camera.main.ScreenToWorldPoint(initialMousePosition)。這個操作的結(jié)果是一個新的 Vector3 向量,表示了從初始鼠標位置到當前鼠標位置的位移向量。每個分量(x、y、z)都分別相減,得到了相應(yīng)的差值。

  3. displacement: 這是一個 Vector3 變量,表示鼠標從初始位置移動到當前位置的位移。通過將當前鼠標位置的世界坐標減去初始鼠標位置的世界坐標,我們得到一個向量,該向量指示了鼠標的位移方向和大小。

這個 displacement 向量在拖拽相機時非常有用,因為它表示了鼠標在世界空間中的移動量,可以用來更新相機的位置,以實現(xiàn)拖拽效果。文章來源地址http://www.zghlxwxcb.cn/news/detail-849835.html

到了這里,關(guān)于unity腳本中的camera相關(guā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)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包