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

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

這篇具有很好參考價(jià)值的文章主要介紹了Unity 3D 人物移動朝向跟隨攝像機(jī)(第一人稱)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

原理

以人物身體旋轉(zhuǎn)控制鏡頭左右滑動
以攝像機(jī)旋轉(zhuǎn)控制鏡頭上下滑動

詳細(xì)解析

首先我們要知道 攝像機(jī)是作為人物的子物體的(充當(dāng)眼睛)
所以當(dāng)人物旋轉(zhuǎn)時(shí) 攝像機(jī)會跟隨它朝相同的方向旋轉(zhuǎn)相同的角度
從而達(dá)到 眼睛(攝像機(jī))注視的方向一定是人物的正前方

那么這樣做有什么好處呢?
若攝像機(jī)鏡頭鎖定為人物正前方
操控人物的移動方向就會變得非常精準(zhǔn)

如果只單純以攝像機(jī)來控制鏡頭的上下左右滑動
雖然這樣也能實(shí)現(xiàn)全方位的第一視角
但當(dāng)人物移動時(shí) 就會出現(xiàn)方向的錯(cuò)誤
因?yàn)榇藭r(shí)雖然鏡頭朝向變了 人物朝向卻沒有變
例如:你將鏡頭向左轉(zhuǎn)90度,按 W 準(zhǔn)備向前走,卻發(fā)現(xiàn)向右移動了(初始方向的前)
unity 角色看向攝像機(jī)的方向,unity,游戲引擎,3d

所以想要移動方向精準(zhǔn) 攝像機(jī)朝向必須和人物朝向一致
unity 角色看向攝像機(jī)的方向,unity,游戲引擎,3d
*注意區(qū)別兩幅圖人物和攝像機(jī)的朝向

代碼講解

核心部分

//俯仰
//以攝像機(jī)的旋轉(zhuǎn)控制鏡頭上下滑動
void Pitch()
{
  float pitchAngle = Input.GetAxis("Mouse Y") * pitchSensitivity * Time.deltaTime;
  Quaternion pitch = Quaternion.AngleAxis(pitchAngle, -Vector3.right); //繞X軸負(fù)方向旋轉(zhuǎn)的度數(shù)
  Quaternion finalAngle = playerCam.localRotation * pitch; //歐拉角轉(zhuǎn)化為四元數(shù) 使攝像機(jī)旋轉(zhuǎn)

  //限定俯仰的角度
  if (Quaternion.Angle(playerCamCenter, finalAngle) < pitchLimit)
  {
    playerCam.localRotation = finalAngle;//賦值
  }
}

//偏轉(zhuǎn)
//以人物的旋轉(zhuǎn)控制鏡頭左右滑動
void Yaw()
{
  float yawAngle = Input.GetAxis("Mouse X") * yawSensitivity * Time.deltaTime;
  Quaternion yaw = Quaternion.AngleAxis(yawAngle, Vector3.up); //繞Y軸旋轉(zhuǎn)的度數(shù)
  Quaternion finalAngle = player.localRotation * yaw; //歐拉角轉(zhuǎn)化為四元數(shù) 使人物旋轉(zhuǎn)

  player.localRotation =finalAngle;//賦值
}

詳細(xì)解析

獲取人物和攝像機(jī)

public Transform player;
public Transform playerCam;

設(shè)定俯仰和偏轉(zhuǎn)的靈敏度(俯仰、偏轉(zhuǎn)的具體講解在上期文章)

public float pitchSensitivity; //Y方向 俯仰(繞X軸)
public float yawSensitivity; //X方向 偏轉(zhuǎn)(繞Y軸)

限定最大俯仰角度(水平方向上的偏轉(zhuǎn)不用限制)

public float pitchLimit = 75;

計(jì)算旋轉(zhuǎn)角度

float pitchAngle = Input.GetAxis("Mouse Y") * pitchSensitivity * Time.deltaTime;
float yawAngle = Input.GetAxis("Mouse X") * yawSensitivity * Time.deltaTime;

繞指定的軸進(jìn)行旋轉(zhuǎn)

Quaternion pitch = Quaternion.AngleAxis(pitchAngle, -Vector3.right);//繞X軸負(fù)方向旋轉(zhuǎn)的度數(shù)
Quaternion yaw = Quaternion.AngleAxis(yawAngle, Vector3.up); //繞Y軸旋轉(zhuǎn)的度數(shù)

理解 Quaternion.AngleAxis

Quaternion:四元數(shù) 這個(gè)在Unity中基本就是用于計(jì)算方位、旋轉(zhuǎn)的
AngleAxis:圍繞的一個(gè)軸
整體就是:指定一個(gè)軸,圍繞該軸旋轉(zhuǎn)指定的角度,得到一個(gè)新的旋轉(zhuǎn)結(jié)果

targetRotation = Quaternion.AngleAxis(angel, direction);

angle:代表旋轉(zhuǎn)多少度
direction:圍繞哪個(gè)軸的哪個(gè)方向(如Vector3.up、Vector3.right等)

將歐拉角轉(zhuǎn)換為四元數(shù)

Quaternion finalAngle = playerCam.localRotation * pitch;
Quaternion finalAngle = player.localRotation * yaw;

完成最終賦值
攝像機(jī)

if (Quaternion.Angle(playerCamCenter, finalAngle) < pitchLimit)
        {
            playerCam.localRotation = finalAngle;
        }

人物文章來源地址http://www.zghlxwxcb.cn/news/detail-832790.html

player.localRotation =finalAngle;

完整代碼

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

public class PlayerLookControl : MonoBehaviour
{
    //獲取攝像機(jī)和人物
    public Transform player;
    public Transform playerCam;

    //俯仰和偏轉(zhuǎn)的靈敏度
    public float pitchSensitivity; //Y方向 俯仰(繞X軸)
    public float yawSensitivity; //X方向 偏轉(zhuǎn)(繞Y軸)

    //最大俯仰角度
    public float pitchLimit = 75;

    private Quaternion playerCamCenter;

    void Start()
    {
        playerCamCenter = playerCam.localRotation;
        Cursor.lockState = CursorLockMode.Locked; //將鼠標(biāo)光標(biāo)鎖定在窗口中心
        Cursor.visible = false; //隱藏鼠標(biāo)光標(biāo)
    }

    void Update()
    {
        Pitch();
        Yaw();
    }

    //俯仰
    //以攝像機(jī)的旋轉(zhuǎn)控制鏡頭上下滑動
    void Pitch()
    {
        float pitchAngle = Input.GetAxis("Mouse Y") * pitchSensitivity * Time.deltaTime;
        Quaternion pitch = Quaternion.AngleAxis(pitchAngle, -Vector3.right); //繞X軸負(fù)方向旋轉(zhuǎn)的度數(shù)
        Quaternion finalAngle = playerCam.localRotation * pitch; //歐拉角轉(zhuǎn)化為四元數(shù) 使攝像機(jī)旋轉(zhuǎn)

        //限定俯仰的角度
        if (Quaternion.Angle(playerCamCenter, finalAngle) < pitchLimit)
        {
            playerCam.localRotation = finalAngle;//賦值
        }
    }

    //偏轉(zhuǎn)
    //以人物的旋轉(zhuǎn)控制鏡頭左右滑動
    void Yaw()
    {
        float yawAngle = Input.GetAxis("Mouse X") * yawSensitivity * Time.deltaTime;
        Quaternion yaw = Quaternion.AngleAxis(yawAngle, Vector3.up); //繞Y軸旋轉(zhuǎn)的度數(shù)
        Quaternion finalAngle = player.localRotation * yaw; //歐拉角轉(zhuǎn)化為四元數(shù) 使人物旋轉(zhuǎn)

        player.localRotation =finalAngle;//賦值
    }
}

到了這里,關(guān)于Unity 3D 人物移動朝向跟隨攝像機(jī)(第一人稱)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

    描述 實(shí)現(xiàn)攝像機(jī)根據(jù)鼠標(biāo)移動跟隨物體旋轉(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ù)按鍵移動

    2024年02月08日
    瀏覽(41)
  • Unity物體始終朝向攝像機(jī)方向

    在上面的代碼中,首先定義了一個(gè)cameraTransform變量,用于存儲攝像機(jī)的Transform組件。 使用 Camera.main 方法來獲取場景中的主攝像機(jī),然后獲取其Transform組件并將其賦值給 cameraTransform 變量。 然后,在Update方法中,我們計(jì)算出攝像機(jī)位置和物體位置之間的向量差,并將其存儲在

    2024年02月15日
    瀏覽(23)
  • unity3d 實(shí)現(xiàn)第三人稱移動與攝像機(jī)調(diào)整

    unity3d 實(shí)現(xiàn)第三人稱移動與攝像機(jī)調(diào)整

    首先展示效果 unity3d 關(guān)于人物移動,這里推薦使用Character Conrroller組件,優(yōu)點(diǎn)就是可以不用處理剛體,不受重力的影響,自帶物理碰撞檢測。 ?人物移動代碼包括轉(zhuǎn)向 接下來就是攝影機(jī)的調(diào)整,這里使用unity自帶的插件cinemachine,非常的推薦,無需使用冗雜的代碼即可設(shè)計(jì)較好

    2024年02月11日
    瀏覽(31)
  • Unity攝像機(jī)跟隨

    將攝像機(jī)直接拖拽到被跟隨的目標(biāo)下面即可,這樣攝像機(jī)永遠(yuǎn)在目標(biāo)的后面 缺點(diǎn): 屏幕旋轉(zhuǎn)太平滑了 目標(biāo)物體在屏幕上的位置永遠(yuǎn)不變 目標(biāo)物體被銷毀時(shí)總不能把攝像機(jī)也銷毀了吧 先相機(jī)坐標(biāo)和物體坐標(biāo)做差,求得偏移量,在之后的每一幀里,將偏移量加上物體的坐標(biāo)。

    2024年02月21日
    瀏覽(31)
  • 【unity】關(guān)于unity3D攝像機(jī)視角移動的幾種方式詳解

    【unity】關(guān)于unity3D攝像機(jī)視角移動的幾種方式詳解

    目錄 一、前言 二、Transform基礎(chǔ) 1、幾種坐標(biāo)系 2、position和localPosition屬性 3、rotation屬性 三、攝像機(jī)的平移 1、鍵盤控制平移 2、鼠標(biāo)控制平移 3、整合? 四、攝像機(jī)的旋轉(zhuǎn) 1、繞自身旋轉(zhuǎn) 2、繞目標(biāo)物體旋轉(zhuǎn) 3、整合? 五、優(yōu)化功能 1、調(diào)整速率 2、切換目標(biāo)物體 3、設(shè)置常用攝

    2024年02月04日
    瀏覽(21)
  • unity攝像機(jī)跟隨鼠標(biāo)旋轉(zhuǎn)

    ?float vertical = Input.GetAxis(\\\"Mouse X\\\") float horizontal = Input.GetAxis(\\\"Mouse Y\\\") 第二種 通過 計(jì)算坐標(biāo)時(shí)只需要通過 Quaternion.Euler 來取得旋轉(zhuǎn)四元數(shù),以玩家為原點(diǎn)衍生一條(0,0,-1)的向量并乘上四元數(shù)以旋轉(zhuǎn)至 Player 指向攝像機(jī)的方向,最后乘上 Distance ,即可得到攝像機(jī)相對玩家的偏移

    2024年02月11日
    瀏覽(32)
  • Unity3D攝像機(jī),鍵盤控制前后左右上下移動,鼠標(biāo)控制旋轉(zhuǎn)、放縮

    Unity3D中運(yùn)行場景時(shí),實(shí)現(xiàn)攝像機(jī)的前、后、左、右、上、下,以及鼠標(biāo)滾輪的放縮,鼠標(biāo)右鍵的旋轉(zhuǎn)操作。親測有效,可供參考。 按鍵功能介紹:W——前;S——后;A——左;D——右;Q——下降;E——上升;鼠標(biāo)右鍵——旋轉(zhuǎn);鼠標(biāo)滾輪——放縮。 Tourcamera腳本需要掛在攝

    2024年02月11日
    瀏覽(26)
  • 《游戲-02_3D-開發(fā)》之—基礎(chǔ)框架與攝像機(jī)跟隨

    《游戲-02_3D-開發(fā)》之—基礎(chǔ)框架與攝像機(jī)跟隨

    導(dǎo)入Xml文檔, ?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"? Root ? TalkInfo ? ? Item Idx=\\\"0\\\" Title=\\\"見到公子\\\" Msg=\\\"我叫粘貼,我們村叫粘家村,是這個(gè)村子的護(hù)衛(wèi),最近村子附近有倭寇出沒,請勇士出手相助!_驅(qū)逐倭寇,責(zé)無旁貸!他們的位置在哪?_他們在城堡南面_等我的好消息吧!\\\" FHead=\\\"2\\\" SH

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

    unity控制攝像機(jī)跟隨玩家三種辦法

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

    2024年02月16日
    瀏覽(39)
  • Unity使用Cinemachine插件實(shí)現(xiàn)攝像機(jī)跟隨和震動

    Unity使用Cinemachine插件實(shí)現(xiàn)攝像機(jī)跟隨和震動

    ?一、實(shí)現(xiàn)跟隨 1、在PackageManager添加插件 2、創(chuàng)建Cinemachine的攝像機(jī),我的項(xiàng)目是2D項(xiàng)目所以創(chuàng)建2D攝像機(jī) 3、將Player拖拽到Follow和LookAt ?4、創(chuàng)建一個(gè)空物體,向它添加PolygonCollider2D,調(diào)整好可視范圍的大小以后在CinemachineVirtuaCamera的Extensions的AddExtensionzhong中選擇 把剛才創(chuàng)建的空

    2024年02月15日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包