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

用Unity3D制作FPS游戲的學(xué)習(xí)筆記————人物移動、利用鼠標(biāo)實現(xiàn)視角轉(zhuǎn)動和人物跳躍(含人物懸空不掉落修復(fù))

這篇具有很好參考價值的文章主要介紹了用Unity3D制作FPS游戲的學(xué)習(xí)筆記————人物移動、利用鼠標(biāo)實現(xiàn)視角轉(zhuǎn)動和人物跳躍(含人物懸空不掉落修復(fù))。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言:

這是我第一次發(fā)布文章,此文章僅供參考,我也是剛學(xué)習(xí)接觸untiy,在制作項目的過程中將有用的寫下來記一記,以便自己之后能回頭看看,各位大佬輕點噴,若有錯誤請麻煩積極提謝謝各位。該文章參考自B站UP主蔡先森_rm-rf發(fā)布的【第一人稱射擊游戲教程2.0【已完結(jié)】】 https://www.bilibili.com/video/BV1J8411d75s/?p=54&share_source=copy_web&vd_source=a2427fab8ac35b158501cad28e7effe7

首先制作人物移動需要先制作一個場景和創(chuàng)建一個角色,這里就不再詳細(xì)贅述如何創(chuàng)建了。

注意:最好創(chuàng)建一個空對象把角色(膠囊體)放進去,父對象坐標(biāo)保持(0.0.0),僅對子對象進行微調(diào)即可,之后創(chuàng)建的父對象也要保持在原點,只動子對象。

用Unity3D制作FPS游戲的學(xué)習(xí)筆記————人物移動、利用鼠標(biāo)實現(xiàn)視角轉(zhuǎn)動和人物跳躍(含人物懸空不掉落修復(fù)),Unity,FPS,游戲開發(fā),游戲,學(xué)習(xí),筆記,visual studio,c#創(chuàng)建好角色和場景之后新建文件夾Script創(chuàng)建新的腳本這里取名為PlayerController,將腳本負(fù)載到角色Character中,在Character對象里添加Character Controller(角色控制器)組件,修改一下他的半徑和高度。

雙擊新建的腳本先給人物添加移動邏輯

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


public class PlayerController : MonoBehaviour
{
    private CharacterController characterController;
    private Vector3 moveDirction;           //設(shè)置人物移動方向


    [Header("玩家數(shù)值")]
    public float Speed;
    [Tooltip("行走速度")] public float walkSpeed;
    [Tooltip("奔跑速度")] public float runSpeed;


    [Header("鍵位設(shè)置")]
    [Tooltip("奔跑按鍵")] public KeyCode runInputName = KeyCode.LeftShift;
    [Tooltip("跳躍按鍵")] public KeyCode jumpInputName = KeyCode.Space;


    [Header("玩家屬性判斷")]
    private CollisionFlags collisionFlags;
    public bool isWalk; //判斷是否行走
    public bool isRun;  //判斷是否奔跑

    void Start()
    {
        characterController = GetComponent<CharacterController>();//獲取角色自身控制器
        walkSpeed = 4f;
        runSpeed = 6f;
    }

    
    void Update()
    {
        Moving();
    }

    public void Moving()
    {
        float h = Input.GetAxisRaw("Horizontal");//檢測是否按下鍵盤AD
        float v = Input.GetAxisRaw("Vertical");//檢測是否按下鍵盤WS

        isRun = Input.GetKeyDown(runInputName);//如果按下左shift返回給isRun的值為true,說明玩家按下加速鍵
        isWalk = (Mathf.Abs(h) > 0 || Mathf.Abs(v) > 0) ? true : false;
        if (isRun)//奔跑行走速度
        {
            Speed = runSpeed;
        }
        else//正常行走速度
        {
            Speed = walkSpeed;
        }
        //設(shè)置人物移動方向,(normalized將速度進行規(guī)范化,防止斜向走速度變大)
        moveDirction = (transform.right * h + transform.forward * v).normalized;
        characterController.Move(moveDirction * Speed * Time.deltaTime);//人物移動
    }
}

?這里移動邏輯跟UP沒差別,使用的是GetAxisRaw方法,這種方法實現(xiàn)的是即松即停,意思就是松開方向鍵就馬上停下,不會再往前滑,但我想做的是松開方向鍵之后,人物還會往前滑一小段距離,按下反方向鍵做急停,方法如下:

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


public class PlayerController : MonoBehaviour
{
    private CharacterController characterController;
    private Vector3 dir;           //設(shè)置人物移動方向


    [Header("玩家數(shù)值")]
    public float Speed;
    [Tooltip("行走速度")] public float walkSpeed;
    [Tooltip("奔跑速度")] public float runSpeed;



    [Header("鍵位設(shè)置")]
    [Tooltip("奔跑按鍵")] public KeyCode runInputName = KeyCode.LeftShift;
    [Tooltip("跳躍按鍵")] public KeyCode jumpInputName = KeyCode.Space;


    [Header("玩家屬性判斷")]
    private CollisionFlags collisionFlags;
    public bool isWalk; //判斷是否行走
    public bool isRun;  //判斷是否奔跑


    void Start()
    {
        characterController = GetComponent<CharacterController>();      //獲取角色自身控制器
        walkSpeed = 4f;
        runSpeed = 6f;
    }

    
    void Update()
    {
        Moving();
    }

    public void Moving()
    {
        
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");


        isRun = Input.GetKey(runInputName);     //如果按下左shift返回給isRun的值為true,說明玩家按下加速鍵
        isWalk = (Mathf.Abs(h) > 0 || Mathf.Abs(v) > 0) ? true : false;

        if (isRun)   //奔跑行走速度
        {
            Speed = runSpeed;
        }
        else                    //正常行走速度
        {
            Speed = walkSpeed;
        }

        Vector3 dir = new Vector3(h, 0, v);
        dir = transform.TransformDirection(dir);
        characterController.Move(dir * Speed * Time.deltaTime);
    }
}

這樣就能實現(xiàn)平滑移動的效果,就類似馬里奧里地板抹油一樣,更加舒服,后面我也會用該移動進行編寫。

接下來是跳躍,跳躍的話在視頻合集P9中寫完之后發(fā)現(xiàn)人物走到高處掉不下去,UP也在后面補充了,我覺得都是屬于跳躍邏輯就一并寫完吧。代碼如下:

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

public class PlayerController : MonoBehaviour
{
    private CharacterController characterController;
    private Vector3 dir;           //設(shè)置人物移動方向


    [Header("玩家數(shù)值")]
    public float Speed;
    [Tooltip("行走速度")] public float walkSpeed;
    [Tooltip("奔跑速度")] public float runSpeed;
    [Tooltip("跳躍的力")] public float jumpForce;
    [Tooltip("下落的力")] public float fallForce;


    [Header("鍵位設(shè)置")]
    [Tooltip("奔跑按鍵")] public KeyCode runInputName = KeyCode.LeftShift;
    [Tooltip("跳躍按鍵")] public KeyCode jumpInputName = KeyCode.Space;


    [Header("玩家屬性判斷")]
    private CollisionFlags collisionFlags;
    public bool isWalk; //判斷是否行走
    public bool isRun;  //判斷是否奔跑
    public bool isJump; //判斷是否跳躍
    public bool isGound;    //判斷是否在地面上

    void Start()
    {
        characterController = GetComponent<CharacterController>();      //獲取角色自身控制器
        walkSpeed = 4f;
        runSpeed = 6f;
        jumpForce = 0f;
        fallForce = 10f;
    }

    
    void Update()
    {
        Moving();
        Jump();
    }

    public void Moving()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");


        isRun = Input.GetKey(runInputName);     //如果按下左shift返回給isRun的值為true,說明玩家按下加速鍵
        isWalk = (Mathf.Abs(h) > 0 || Mathf.Abs(v) > 0) ? true : false;

        if (isRun)   //奔跑行走速度
        {
            Speed = runSpeed;
        }
        else                    //正常行走速度
        {
            Speed = walkSpeed;
        }

        Vector3 dir = new Vector3(h, 0, v);
        dir = transform.TransformDirection(dir);
        characterController.Move(dir * Speed * Time.deltaTime);

    }

    public void Jump()
    {
        isJump = Input.GetKeyDown(jumpInputName);
        //判斷玩家按下跳躍鍵,并且此時在地上,才能進行跳躍
        if (isJump && isGound)
        {
            isGound = false;
            jumpForce = 5f; //設(shè)置跳躍力
        }
        //當(dāng)前沒有按下空格并且檢測在地面上,那么isGround判斷為false(修復(fù)在空中isGround還是判定為true的bug)
        else if (!isJump && isGound)
        {
            isGound = false;
        }

        //此時按下跳躍鍵跳起來了,并且不在地上
        if (!isGound)
        {
            jumpForce = jumpForce - fallForce * Time.deltaTime;  //每秒將跳躍力進行累減,使其下落
            Vector3 jump = new Vector3(0, jumpForce * Time.deltaTime, 0);   //將跳躍力轉(zhuǎn)化成v3坐標(biāo)
            collisionFlags = characterController.Move(jump);    //調(diào)用角色控制器移動方法,向上方法模擬跳躍

            /*判斷玩家在地上
             CollisionFlages:CharacterController 內(nèi)置的碰撞位置標(biāo)識號
            CollisionFlags.Below -->在地上*/
            if (collisionFlags == CollisionFlags.Below)
            {
                isGound = true;
                jumpForce = -2f;
            }
        }
    }
}

這樣人物移動跳躍就已經(jīng)做好了,剩下視角移動,我們先將Main Camera拖進我們創(chuàng)建的角色里做我們角色的子對象,將坐標(biāo)軸重置,調(diào)整至合適位置,將剪裁調(diào)至0.01,在Script文件夾下創(chuàng)建MouseLook腳本,并將其拖入Main Camera內(nèi)。用Unity3D制作FPS游戲的學(xué)習(xí)筆記————人物移動、利用鼠標(biāo)實現(xiàn)視角轉(zhuǎn)動和人物跳躍(含人物懸空不掉落修復(fù)),Unity,FPS,游戲開發(fā),游戲,學(xué)習(xí),筆記,visual studio,c#

雙擊MouseLook腳本,輸入以下代碼:

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


/// <summary>
/// 攝像機的旋轉(zhuǎn)
/// 玩家左右旋轉(zhuǎn)控制實現(xiàn)左右移動
/// 攝像機上下旋轉(zhuǎn)控制視線上下移動
/// </summary>
public class MouseLook : MonoBehaviour
{
    [Tooltip("鼠標(biāo)靈敏度")] public float mouseSenstivity = 400f;
    private Transform playerBody;   //玩家位置
    private float yRotation = 0f;   //攝像機上下旋轉(zhuǎn)

    [Tooltip("當(dāng)前攝像機的初始高度")] public float height = 1.8f;



    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;       //將鼠標(biāo)隱藏并鎖定在屏幕中心
        playerBody = transform.GetComponentInParent<PlayerController>().transform;
    }


    void Update()
    {
        float mouseX = Input.GetAxis("Mouse X") * mouseSenstivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSenstivity * Time.deltaTime;

        yRotation -= mouseY;    //將上下旋轉(zhuǎn)的軸值進行累計
        yRotation = Mathf.Clamp(yRotation, -80f, 80f);      //限制攝像機上下旋轉(zhuǎn)角度
        transform.localRotation = Quaternion.Euler(yRotation, 0f, 0f);  //攝像機上下旋轉(zhuǎn)
        playerBody.Rotate(Vector3.up * mouseX); //玩家左右移動
    }

}

這樣一來基本的角色移動控制就已經(jīng)寫完了,整體來講這方面還是比較簡單的,除了人物在高處懸空以外也沒啥易踩的坑,如果你不是用Character Controller來控制角色而是用Rigidbody(剛體)來處理角色的話就不會出現(xiàn)高處懸空問題,Rigidbody是Unity自帶的組件,里面添加了物理引擎的運算,但是如果是用來控制人物角色的話還是Character Controller會比較好。

這次的分享就到這里,感謝閱讀,如有問題可及時提出,讀者可以和視頻一起觀看,更好理解。文章來源地址http://www.zghlxwxcb.cn/news/detail-860099.html

到了這里,關(guān)于用Unity3D制作FPS游戲的學(xué)習(xí)筆記————人物移動、利用鼠標(biāo)實現(xiàn)視角轉(zhuǎn)動和人物跳躍(含人物懸空不掉落修復(fù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【Unity學(xué)習(xí)筆記】b站Unity架構(gòu)課Unity3D 商業(yè)化的網(wǎng)絡(luò)游戲架構(gòu)(高級/主程級別)

    【Unity學(xué)習(xí)筆記】b站Unity架構(gòu)課Unity3D 商業(yè)化的網(wǎng)絡(luò)游戲架構(gòu)(高級/主程級別)

    自己跟著學(xué)完了,寫了不少代碼,會放在CSDN代碼庫,因為老師并沒有提供源碼,錄屏也不是完全連續(xù),所以難免 有代碼缺少、無法運行 的情況,但是確實學(xué)到了不少真本事,主要是了解老師的架構(gòu)思想。 b站課程地址 課程我自己是跟著學(xué)完了的,本文是個人筆記記錄和好課

    2024年02月02日
    瀏覽(90)
  • unity3d人物碰撞提示文字

    設(shè)置碰撞體,例如cube 將腳本掛載在物體上,碰撞顯示text 碰撞體的子物體,例如3dObject-legacy-text 綁定代碼,使文字一直正對屏幕(相機)

    2024年02月11日
    瀏覽(15)
  • Unity3D方向鍵控制人物移動的代碼

    也可以換成 Translate 函數(shù)默認(rèn)模式是 Space.Self ,此時移動方向需要為人物坐標(biāo)系下的人物前進方向 Vector3(0, 0, 1) ;如果模式指定為 Space.World ,移動方向應(yīng)該為世界坐標(biāo)系下的人物前進方向 transform.forward , transform.forward 在人物轉(zhuǎn)向過程中會改變。如果不注意這個問題,人物轉(zhuǎn)

    2024年02月11日
    瀏覽(34)
  • Unity3D學(xué)習(xí)記錄01:URP渲染管線以及3D游戲場景設(shè)置

    Unity3D學(xué)習(xí)記錄01:URP渲染管線以及3D游戲場景設(shè)置

    以下內(nèi)容所使用的版本均為Unity2022.3 先在 Window-Package Manager-Unity Registry 里面搜索添加Universal RP ? Unity中,創(chuàng)建渲染管線的方式為Asset文件夾下右鍵 Create-Readering-URP Asset(with Universal Asset) 會創(chuàng)建以下兩個Pipeline: ?接著在圖中的設(shè)置里添加這兩個渲染管線(Project Setting在Edit窗口下

    2024年02月08日
    瀏覽(102)
  • Unity3D學(xué)習(xí)筆記——物理引擎

    Unity3D學(xué)習(xí)筆記——物理引擎

    1簡介 剛體可以為游戲?qū)ο筚x予物理特性,是游戲?qū)ο笤谖锢硐到y(tǒng)的控制下接受推力和扭力,從而實現(xiàn)現(xiàn)實世界的物理學(xué)現(xiàn)象。 2屬性 1簡介 碰撞器是物理組件的一類,他與剛體一起促使碰撞發(fā)生 碰撞體是簡單形狀,如方塊、球形或者膠囊形,在 Unity 3D 中每當(dāng)一個 GameObjects

    2023年04月12日
    瀏覽(28)
  • Unity3D中實現(xiàn)人物的第一人稱視角

    Unity3D中實現(xiàn)人物的第一人稱視角

    打開unity創(chuàng)建一個場景地圖可以添加一個Plane作為地面 在Hierarchy視圖中右鍵創(chuàng)建一個膠囊體(Capsule)作為Player,添加好后重置膠囊體的位置,并且調(diào)整膠囊體在一個合適的位置。 將Main Camera拖拽到到player內(nèi)作為子對象,重置一下Main Camera的transform,并且再調(diào)整一下它在player中

    2024年02月11日
    瀏覽(93)
  • Unity3D學(xué)習(xí)筆記8——GPU實例化(3)

    Unity3D學(xué)習(xí)筆記8——GPU實例化(3)

    在前兩篇文章《Unity3D學(xué)習(xí)筆記6——GPU實例化(1)》《Unity3D學(xué)習(xí)筆記6——GPU實例化(2)》分別介紹了通過簡單的頂點著色器+片元著色器,以及通過表面著色器實現(xiàn)GPU實例化的過程。而在Unity的官方文檔Creating shaders that support GPU instancing里,也提供了一個GPU實例化的案例,這里就詳

    2023年04月22日
    瀏覽(23)
  • Unity3D制作天空盒

    Unity3D制作天空盒

    1、下載并導(dǎo)入hdr高動態(tài)范圍圖像資源到Project視圖中,然后將圖片的“Texture Shape”修改為“Cube”。 ?3、將步驟1的圖片拖入“Cubemap(HDR)”的框內(nèi)。 ?4、最后將制作好的材質(zhì),直接拖入Scene窗口中。 ???????? ?

    2024年02月15日
    瀏覽(24)
  • Unity3D高級編程主程手記 學(xué)習(xí)筆記二:C#技術(shù)要點

    Unity3D高級編程主程手記 學(xué)習(xí)筆記二:C#技術(shù)要點

    1.Untiy3D中C#的底層原理 Unity底層在運行C#程序時有兩種機制:一種是Mono,另一種是IL2CPP。 Mono存在的目的是為了跨平臺 ,因為最初C#只支持Windows。而IL可以看成是一種匯編語言且完全基于堆棧,必須運行在虛擬機上。也就是說C#會被編譯器編譯成IL,當(dāng)需要他們時就會被實時的

    2024年02月08日
    瀏覽(94)
  • Unity3D粒子系統(tǒng)之制作煙霧特效

    Unity3D粒子系統(tǒng)之制作煙霧特效

    本文將會介紹如何使用Unity內(nèi)的粒子系統(tǒng)制作煙霧效果。 如果想了解Unity粒子系統(tǒng)中的基礎(chǔ)屬性,可以看這篇博客:Unity3D 粒子系統(tǒng)之基礎(chǔ)屬性介紹 先附上預(yù)覽圖: 材質(zhì)貼圖 首先我們需要一張煙霧材質(zhì)用的材質(zhì)貼圖,我是自己畫的,可以參考下圖自己畫一張或者去網(wǎng)上找素材

    2024年02月02日
    瀏覽(35)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包