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

Unity【角色/攝像機(jī)移動(dòng)控制】【3.攝像機(jī)跟隨角色】

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

本章代碼基于前兩章。
1. 我們新建CameraController腳本,將其掛載到Camera上
2. 在角色Player下新建一個(gè)空物體,命名為cameraTargetPoint,并將該物體掛載至CameraController腳本中【注意代碼中的這行:public Transform cameraTargetPoint;】,將該空物體放在人物頭部附近位置
3.將PlayerController腳本綁定至CameraController中【public PlayerController playerController;】
4.本章代碼的實(shí)現(xiàn)原理是讓攝像機(jī)對(duì)準(zhǔn)空物件,并保持一定距離

5. 具體代碼如下

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

public class CameraController : MonoBehaviour
{
    private static float lower_upper_bound = 60f;
    public Transform cameraTargetPoint;
    public float cameraDistance = 5.0f;
    public Vector2 verticalRange = new Vector2(-lower_upper_bound, lower_upper_bound);
    public float cameraSensitivity = 120f;

    private Transform verticalObj;
    private Transform horizontalObj;
    private float horizontalValue;
    private float verticalValue;

    public PlayerController playerController;
    // Start is called before the first frame update
    void Start()
    {
        horizontalObj = new GameObject("Camera Horizontal").transform;
        horizontalObj.SetParent(cameraTargetPoint);
        horizontalObj.localPosition = Vector3.zero;
        horizontalObj.localRotation = Quaternion.identity;
        verticalObj = new GameObject("Camera Vertical").transform;
        verticalObj.SetParent(horizontalObj);
        verticalObj.localPosition = Vector3.zero;
        verticalObj.localRotation = Quaternion.identity;
        transform.SetParent(verticalObj);
        transform.localPosition = new Vector3(0,0,-cameraDistance);
        transform.localRotation = Quaternion.identity; 
    }

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

    private void cameraMoving()
    {
        horizontalValue += Input.GetAxis("Mouse X") * Time.deltaTime * cameraSensitivity;
        horizontalObj.localRotation = Quaternion.Euler(new Vector3(0, horizontalValue, 0));
        verticalValue += Input.GetAxis("Mouse Y") * Time.deltaTime * cameraSensitivity;
        verticalValue = Mathf.Clamp(verticalValue, verticalRange.x, verticalRange.y);
        verticalObj.localRotation = Quaternion.Euler(new Vector3(-verticalValue, 0, 0));
    }

    private void DoNotTouchTheGround()    // 攝像機(jī)與角色點(diǎn)中間有物體時(shí),讓攝像機(jī)處于物體前,避免遮擋
    {
        Vector3 distanceVec = transform.position - cameraTargetPoint.position;
        float distance = distanceVec.magnitude;
        RaycastHit hit;
        if(Physics.Raycast(cameraTargetPoint.position,distanceVec, out hit,distance))
        {
            if(hit.transform.tag != "Player")
            {
                transform.position = hit.point;
            }
            else
            {
                transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(0, 0, -distance), 0.3f);
            }
        }
        else
        {
            transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(0, 0, -distance), 0.3f);
        }

    }
}

Tips:以上代碼中,DoNotTouchTheGround()方法不是必須的,該方法是用于限制當(dāng)攝像機(jī)與角色之間有障礙物時(shí),把攝像機(jī)放在障礙物前方以避免視覺阻礙,可以看情況添加。

至此,我們可以實(shí)現(xiàn)攝像機(jī)跟隨角色移動(dòng),并且鼠標(biāo)能操控?cái)z像機(jī)繞著角色轉(zhuǎn)動(dòng),但仍有一個(gè)問題:當(dāng)攝像機(jī)位于人物前方時(shí),人物前進(jìn)方向仍是我們的后方,這是由于參考坐標(biāo)系的緣故,具體修復(fù)如下:

1. 在PlayerController腳本中,添加

public Transform cameraTargetPoint;

在Move方法中添加【moveingVec = cameraTargetPoint.TransformDirection(moveingVec);】:

private void Move()
    {
        float horizontalInput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");

        Vector3 moveingVec = new Vector3(horizontalInput, 0f, verticalInput) * Time.deltaTime * speed;
        moveingVec = cameraTargetPoint.TransformDirection(moveingVec);
        transform.Translate(moveingVec);
        
    }

2. 在CameraController腳本中的cameraMoving()方法中添加下句:

playerController.cameraTargetPoint = horizontalObj;

于是即可實(shí)現(xiàn)攝像頭跟隨鼠標(biāo),并圍繞角色運(yùn)動(dòng),并且角色運(yùn)動(dòng)方向【僅僅是方向,如果要人物轉(zhuǎn)向,則還需其他修改,本系列其他章節(jié)會(huì)有涉及】可以自適應(yīng)為當(dāng)前攝像頭的前方文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-835167.html

到了這里,關(guān)于Unity【角色/攝像機(jī)移動(dòng)控制】【3.攝像機(jī)跟隨角色】的文章就介紹完了。如果您還想了解更多內(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ī)跟隨鼠標(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)
  • unity控制攝像機(jī)跟隨玩家三種辦法

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

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

    2024年02月16日
    瀏覽(39)
  • Unity制作射擊游戲案例01(控制角色+發(fā)射子彈+攝像機(jī)跟蹤)

    Unity制作射擊游戲案例01(控制角色+發(fā)射子彈+攝像機(jī)跟蹤)

    //【業(yè)務(wù)邏輯】這個(gè)腳本用來(lái)1.控制物體移動(dòng)旋轉(zhuǎn)(WASD)、? ?2.發(fā)射子彈(空格鍵) //【程序邏輯2】 首先檢測(cè)用戶沒有按下空格鍵 2.如果按下呢執(zhí)行發(fā)射子彈函數(shù)?? ?3.克隆子彈 4.讓克隆的子彈往前跑 為子彈模板添加剛體,并且限制旋轉(zhuǎn) 這個(gè)腳本需要掛在到攝像機(jī),里面談

    2024年02月06日
    瀏覽(30)
  • Unity 控制攝像機(jī)鏡頭的上下左右移動(dòng)

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

    2024年02月11日
    瀏覽(26)
  • 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日
    瀏覽(32)
  • unity攝像機(jī)跟隨鼠標(biāo)旋轉(zhuǎn)

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

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

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

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

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

    ?一、實(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)
  • Unity2D設(shè)置攝像機(jī)跟隨和邊界范圍

    Unity2D設(shè)置攝像機(jī)跟隨和邊界范圍

    ????????在制作2D游戲時(shí)時(shí)常會(huì)遇到需要設(shè)置攝像機(jī)跟隨玩家的情況,一般情況下有三種處理比較簡(jiǎn)單的處理方法,第一種也是簡(jiǎn)單粗暴的方法,把攝像機(jī)直接作為玩家的子物體就可以了,當(dāng)然這樣做的后果就是不利于后續(xù)擴(kuò)展更多的功能,比如切換玩家控制的角色時(shí),你

    2024年02月13日
    瀏覽(33)
  • unity-第三人稱攝像機(jī)簡(jiǎn)單腳本(包括跟隨、視角旋轉(zhuǎn)、滾輪縮放)

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

    2024年02月08日
    瀏覽(310)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包