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

Unity 第三人稱 玩家控制器+相機控制器

這篇具有很好參考價值的文章主要介紹了Unity 第三人稱 玩家控制器+相機控制器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

今天給大家分享一個簡單的Unity第三人稱視角下玩家控制器和相機控制器的腳本編寫方法。

?

效果如下:

一、實現(xiàn)原理

主要分三部分實現(xiàn):人物旋轉(zhuǎn)、人物移動、相機旋轉(zhuǎn)。

1.人物移動:

首先獲取到人物水平和垂直移動的參數(shù):

inputH = Input.GetAxis("Horizontal");//獲取水平/垂直移動參數(shù)
inputV = Input.GetAxis("Vertical");

因為人物移動的方向跟攝像頭一致,所以需要根據(jù)攝像頭的方向軸來確定玩家的移動方向,然后移動玩家人物剛體組件:

moveDir = mCamera.TransformDirection(inputH, 0, inputV);//人物移動朝向
rigid.MovePosition(transform.position + new Vector3(moveDir.x,0,moveDir.z) * wSpeed * Time.fixedDeltaTime);//移動人物

?2.相機旋轉(zhuǎn):

首先獲取鼠標水平/垂直移動參數(shù),再使相機跟隨人物,更新旋轉(zhuǎn):

mouseX += Input.GetAxis("Mouse X") * xSpeed * Time.deltaTime;//更新鼠標水平/垂直移動參數(shù)
mouseY += Input.GetAxis("Mouse Y") * ySpeed * Time.deltaTime;
transform.position = body.position;//相機跟隨人物移動
transform.rotation = Quaternion.Euler(mouseY, mouseX, 0);//相機旋轉(zhuǎn)

3.人物旋轉(zhuǎn):

首先由水平/垂直移動的參數(shù)計算得到旋轉(zhuǎn)角度:

float targetRotation = (Mathf.Atan2(inputH, inputV) * Mathf.Rad2Deg + mCamera.eulerAngles.y

這里注意人物旋轉(zhuǎn)要基于當下相機的方向,如果只是基于人物模型方向,會發(fā)生人物移動與人物旋轉(zhuǎn)方向不一致的情況,如下圖,人物倒退地相機前走:

Unity 第三人稱 玩家控制器+相機控制器

得到角度后利用Mathf.SmoothDampAngle()函數(shù)較為絲滑地旋轉(zhuǎn)人物:

transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref currentVelocity, smoothTime, rSpeed, Time.deltaTime);

二、物體層級

物體層級如下:

?Unity 第三人稱 玩家控制器+相機控制器

玩家組件掛載在人物預(yù)制體上,并創(chuàng)建RigidBody和Collider等組件。再創(chuàng)建一個空物體,坐標與玩家人物相同,將MainCamera作為子物體,并調(diào)節(jié)相機位置。

三、完整代碼

PlayerController.cs

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

public class PlayerController : MonoBehaviour
{
    private Rigidbody rigid;//玩家剛體
    private Animator animator;//玩家動畫機
    public Transform mCamera;//相機組件

    private Vector3 moveDir;//人物移動方向
    private float currentVelocity = 1;//目前的轉(zhuǎn)向速度(SmoothDampAngle函數(shù)的返還參數(shù))
    private float smoothTime = 0.1f;//完成平滑的時間(SmoothDampAngle函數(shù)的參數(shù))
    public float wSpeed;//移動速度
    public float rSpeed;//旋轉(zhuǎn)速度
    public float jPower;//跳躍力度
    private float inputH;//水平移動參數(shù)
    private float inputV;//垂直移動參數(shù)
    private bool isMove;//是否移動
    private bool isRun;//是否奔跑
    private bool isGround;//是否在地面上

    void Start()
    {
        rigid = GetComponent<Rigidbody>();
        animator = GetComponent<Animator>();
    }

    void Update()
    {
    }

    private void FixedUpdate()
    {
        inputH = Input.GetAxis("Horizontal");//獲取水平/垂直移動參數(shù)
        inputV = Input.GetAxis("Vertical");
        animator.SetFloat("inputH", inputH);//更新動畫機參數(shù)
        animator.SetFloat("inputV", Mathf.Abs(inputV));
        animator.SetBool("isMove", isMove);
        animator.SetBool("isRun", isRun);
        if(Input.GetKeyDown(KeyCode.Space))
        {
            isGround = false;
            animator.CrossFade("Jump", 0.1f);
            rigid.AddForce(0, jPower, 0);//給剛體向上的力
        }//更新跳躍動畫
        if (inputH != 0 || inputV != 0)
        {
            isMove = true;
            transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y, (Mathf.Atan2(inputH, inputV) * Mathf.Rad2Deg + mCamera.eulerAngles.y), ref currentVelocity, smoothTime, rSpeed, Time.deltaTime);
        }//改變?nèi)宋锍?        else
        {
            isMove = false;
        }//更新移動狀態(tài)
        if (Input.GetKey(KeyCode.LeftShift))
        {
            wSpeed = 6;
            isRun = true;
        }//更新奔跑狀態(tài)
        else
        {
            wSpeed = 3;
            isRun = false;
        }
        moveDir = mCamera.TransformDirection(inputH, 0, inputV);
        rigid.MovePosition(transform.position + new Vector3(moveDir.x,0,moveDir.z) * wSpeed * Time.fixedDeltaTime);//移動人物
    }

    private void OnCollisionEnter(Collision collision)
    {
        if(!isGround)
        {
            if(collision.gameObject.CompareTag("Ground"))
            {
                isGround = true;
            }
        }//判斷是否接地
    }
}

CameraController.cs

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

public class CameraController : MonoBehaviour
{
    public Transform body;//玩家人物組件

    public float maxY = 40;//相機旋轉(zhuǎn)上界限
    public float minY = -10;//相機旋轉(zhuǎn)下界限
    public float xSpeed = 250;//相機縱向旋轉(zhuǎn)速度
    public float ySpeed = 125;//相機橫向旋轉(zhuǎn)速度
    private float mouseX;//鼠標水平移動參數(shù)
    private float mouseY;//鼠標垂直移動參數(shù)

    void Start()
    {
        
    }

    void Update()
    {
        mouseX += Input.GetAxis("Mouse X") * xSpeed * Time.deltaTime;//更新鼠標水平/垂直移動參數(shù)
        mouseY += Input.GetAxis("Mouse Y") * ySpeed * Time.deltaTime;
        mouseY = clampAngle(mouseY);
        transform.position = body.position;//相機跟隨人物移動
        transform.rotation = Quaternion.Euler(mouseY, mouseX, 0);//相機旋轉(zhuǎn)
    }

    private float clampAngle(float angle)
    {
        if (angle < -360)
        {
            angle += 360;
        }
        if (angle > 360)
        {
            angle -= 360;
        }
        return Mathf.Clamp(angle, minY, maxY);
    }//控制相機上下旋轉(zhuǎn)角度
}

歡迎大家在評論區(qū)交流學(xué)習(xí)~文章來源地址http://www.zghlxwxcb.cn/news/detail-457778.html

到了這里,關(guān)于Unity 第三人稱 玩家控制器+相機控制器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Unity第三人稱如何讓人物始終朝向相機方向移動

    Unity第三人稱如何讓人物始終朝向相機方向移動

    不知道如何制作簡易第三人稱相機的同學(xué)可以看我的這篇文章:Unity如何實現(xiàn)第三人稱相機跟隨 我們在開發(fā)第三人稱游戲過程中很容易遇到:我們的玩家角色,他面對北方,背后有一臺攝像機,正巧也是面對北方?,F(xiàn)在,他向右轉(zhuǎn)90度,面對東方。此時如果讓他向前走,那么

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

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

    2024年02月08日
    瀏覽(310)
  • unity3d 實現(xiàn)第三人稱移動與攝像機調(diào)整

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

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

    2024年02月11日
    瀏覽(31)
  • 第三十章 Unity角色控制器 Character Controller

    第三十章 Unity角色控制器 Character Controller

    在我們之前的章節(jié)中,我們已經(jīng)了解了碰撞體和剛體。但是,對于剛體這個組件來講,有兩種使用方式。其一就是用它來模擬現(xiàn)實世界的移動或碰撞效果(例如,門的開關(guān));其二就是使用代碼來控制物體移動或碰撞(例如,角色的行走)。兩種方式使用場景不同而已。 本章

    2024年02月08日
    瀏覽(91)
  • UE4第三人稱多人聯(lián)機游戲開發(fā)01

    UE4第三人稱多人聯(lián)機游戲開發(fā)01

    單人游戲 中一臺電腦只有一個游戲會話(Session),我們可以通過在同一電腦中分屏并用不同的輸入設(shè)備,單人游戲不需要使用互聯(lián)網(wǎng)。 多人游戲 中,游戲?qū)嵗讵毩⒌膬膳_電腦中運行,而由于玩家在不斷地輸入指令,因此我們需要將一個游戲?qū)嵗械男畔⑼ㄟ^互聯(lián)網(wǎng)傳輸?shù)?/p>

    2024年02月07日
    瀏覽(165)
  • ue4第三人稱第一人稱切換。

    ue4第三人稱第一人稱切換。

    1.默認第三人稱。將遠點的相機設(shè)置auto active為true。近點相機設(shè)置為false。 ? 在做好的actor中設(shè)置camera的active,和人物是否隱藏。 ? ?通過v鍵來切換第一人稱和第二人稱。

    2024年02月12日
    瀏覽(92)
  • UE4 中可全局獲取的變量(例如游戲?qū)嵗?、玩家控制器等?詳解

    UE4 中可全局獲取的變量(例如游戲?qū)嵗?、玩家控制器等?詳解

    ???♂? 作者:海碼007 ?? 專欄:UE虛幻引擎專欄 ?? 標題:UE4 中可全局獲取的變量(例如游戲?qū)嵗?、玩家控制器、游戲模式等?詳解 ?? 寄語:加油,一次專注一件事! ?? 最后: 文章作者技術(shù)和水平有限,如果文中出現(xiàn)錯誤,希望大家能指正,同時有問題的話,歡迎

    2024年02月06日
    瀏覽(435)
  • VR工地安全虛擬現(xiàn)實體驗:多種事故模擬,第三人稱回看

    VR工地安全虛擬現(xiàn)實體驗:多種事故模擬,第三人稱回看

    建筑工地五大傷害是指:高處墜落、坍塌、物體打擊、機械傷害、觸電。利用VR(虛擬現(xiàn)實)技術(shù)體驗建筑工地五大傷害,可以為建筑工人提供更真實、更安全的工作環(huán)境,同時也可以幫助他們更好地了解和掌握工作技能。 以下是 VR工地安全虛擬現(xiàn)實體驗軟件 的價值: 首先,通

    2024年02月12日
    瀏覽(20)
  • UE4/5 實現(xiàn)多相機模式切換(第一人稱切第三人稱等)

    UE4/5 實現(xiàn)多相機模式切換(第一人稱切第三人稱等)

    對于多相機模式的切換,網(wǎng)上普遍使用SetViewTargetWithBlend這個節(jié)點,但這個節(jié)點很多相機參數(shù)不能設(shè)置,也不適合運用于游戲中多相機模式切換的場合。 UE中World Settings里的玩家控制器中,默認的控制器行為會對當前開啟的Camera組件進行激活處理: 因此,默認綁在Pawn上的相機

    2024年02月11日
    瀏覽(23)
  • Unity中人物控制器

    ? ?在Unity中控制器是很常見的功能,一般的人物控制器有兩種方法,一種是通過代碼實現(xiàn),另外一種就是通過Unity中的API實現(xiàn)。 ??這里主要介紹第一種方法。 ??首先對控制器步驟進行分析。 步驟1:通過方向鍵控制人物移動。 步驟2:控制攝像機跟隨人物 步驟1:通過方

    2024年02月13日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包