日韩在线免费播放-日韩在线免费av-日韩在线免费-日韩在线毛片-国产高清不卡视频-国产高清不卡

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 第一人稱視角移動(dòng)問(wèn)題

第一人稱視角移動(dòng)問(wèn)題 時(shí)間:2017-11-07      來(lái)源:未知

Unity3D作為目前比較火的游戲引擎,其在游戲移動(dòng)端的市場(chǎng)范圍是非常大的。雖然其渲染能力以及效率有待提高,但是不妨礙它的強(qiáng)大優(yōu)勢(shì)。并且在2016年VR元年的確定下,它對(duì)市場(chǎng)絕大多數(shù)VR設(shè)備開發(fā)的支持使其越來(lái)越受到人們的歡迎。

在VR開發(fā)中,第一人稱的移動(dòng)始終是至關(guān)重要的一項(xiàng)。無(wú)論是角色的速度、動(dòng)作幅度的搖擺、人物的動(dòng)作姿態(tài)等等,都是開發(fā)者需要謹(jǐn)慎對(duì)待的部分。接下來(lái)我和大家說(shuō)下在VR中移動(dòng)容易出現(xiàn)的一些問(wèn)題。

由于公司在開發(fā)VR項(xiàng)目的時(shí)候沒(méi)有考慮到的多設(shè)備支持,并沒(méi)有用到市場(chǎng)上相關(guān)的SDK,而是使用Unity中Camera的屬性制作了簡(jiǎn)易的VR攝像機(jī)。制作部分如下:

首先創(chuàng)建一個(gè)空物體并命名為VRCamera,用來(lái)作為兩個(gè)攝像機(jī)的父物體,并將VRCamera物體的Transform組件初始化。方便對(duì)VR攝像機(jī)的操作。

然后選中VRCamera物體,然后創(chuàng)建出兩個(gè)攝像機(jī),分別命名為L(zhǎng)eftCamera和RightCamera。作為VRCamera的子物體。

然后將其中任意一個(gè)Camera上的Audio Listener組件單擊右鍵選擇Remove Component移除掉(只移除一個(gè))。

將Main Camera攝像機(jī)Transform歸0。將其拖到VRCamera下作為其子物體。并將Depth設(shè)置為-1。

將LeftCamera攝像機(jī)參數(shù)修改為下圖所示。

將RightCamera攝像機(jī)參數(shù)修改為下圖所示。

修改完之后,創(chuàng)建一個(gè)Cube調(diào)整其位置便于觀察,在Game視圖下的場(chǎng)景如下圖所示。

然后在VRCamera上添加碰撞體和剛體進(jìn)行人物的模擬,并且在其身上掛在移動(dòng)的腳本。正常情況下是掛在的接受手機(jī)陀螺儀數(shù)據(jù)的腳本。如果使用普通的移動(dòng)方式,例如:

對(duì)其位置進(jìn)行增減transrorm.position += 或者-=,或者使用transfrom.Translate方法此時(shí)均會(huì)產(chǎn)生低頭的時(shí)候會(huì)穿破地面,抬頭的時(shí)候會(huì)離開地面。或者干脆就停止不動(dòng)。

遇到這種問(wèn)題的時(shí)候,當(dāng)物體帶有剛體,需要對(duì)物體進(jìn)行移動(dòng)的時(shí)候,好的辦法是對(duì)其剛體組件進(jìn)行操作,使用如下方法:

Rigidbody.MovePosition(transform.position +=/-= ...);

而其移動(dòng)的方向是:

Vector3 dir = new Vector3(Camera.main.transform.forward.x, 0,Camera.main.transform.forward.z);

這樣就能保證當(dāng)?shù)仡^的時(shí)候,向前移動(dòng)會(huì)低著頭向前走,而不是穿破地面,抬頭的時(shí)候是抬頭向前走,而不是離開地面。

下面是我做的一個(gè)模擬:

創(chuàng)建工程,然后在Inspector面板中創(chuàng)建物體Plane作為地面。

然后繼續(xù)在Inspector面板中創(chuàng)建子物體Capsule模擬人物模型,并調(diào)節(jié)Capsule物體的高度,使其底部處于Plane物體上。

在Project中創(chuàng)建Material,并填充顏色,將該材質(zhì)球賦值給Plane,以作區(qū)別。

在Project面板中創(chuàng)建腳本Move.cs,用來(lái)實(shí)現(xiàn)物體的移動(dòng)和旋轉(zhuǎn)。按下“W”或者“↑”是向前走,按下“S”或者“↓”是向后走。移動(dòng)鼠標(biāo)是旋轉(zhuǎn),然后將該腳本掛載在Capsule物體上。

腳本如下: 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

 

public class Move : MonoBehaviour

{

    #region 變量

    /// <summary>

    /// 剛體

    /// </summary>

    private Rigidbody rigid;

 

    /// <summary>

    /// 移動(dòng)的速度

    /// </summary>

    private float walkSpeed = 0.05f;

 

    /// <summary>

    /// 移動(dòng)的方向

    /// </summary>

    private float moveDir;

 

    /// <summary>

    /// 旋轉(zhuǎn)的方向

    /// </summary>

    private float rotateDir;

 

    /// <summary>

    /// 旋轉(zhuǎn)速度

    /// </summary>

    private float rotateSpeed = 30f;

    #endregion

    #region Unity 方法

 

    private void Awake()

    {

        // 初始化剛體組件

        rigid = transform.GetComponent<Rigidbody>();

    }

    private void Update()

    {

        moveDir = Input.GetAxis("Vertical");

        rotateDir = Input.GetAxis("Mouse X");

        if (rotateDir != 0)

        {

         transform.Rotate

            (Vector3.up * rotateDir * Time.deltaTime * rotateSpeed);

        }

        if (moveDir > 0)

        {

            // 向前走

            MoveForward();

        }

        else if(moveDir < 0)

        {

            // 向后走

            MoveBack();

        }

    }

 

    #endregion

    #region 具體實(shí)現(xiàn)的方法

    /// <summary>

    /// 向前走

    /// </summary>

    /// <param name = "speed">移動(dòng)的速度</param>

    /// <param name="fixedTime">固定更新的時(shí)間</param>

    void MoveForward()

    {

        // 移動(dòng)的方向,y軸不變

        Vector3 dir = new Vector3(Camera.main.transform.forward.x, 

            0,

            Camera.main.transform.forward.z);

        // 移動(dòng)

        rigid.MovePosition(transform.position + dir * walkSpeed);

    }

 

    /// <summary>

    /// 向后走

    /// </summary>

    /// <param name="speed">移動(dòng)的速度</param>

    /// <param name="fixedTime">固定更新時(shí)間</param>

    void MoveBack()

    {

        // 移動(dòng)的方向,y軸不變

        Vector3 dir = new Vector3(Camera.main.transform.forward.x,

             0,

             Camera.main.transform.forward.z);

        // 移動(dòng)

        rigid.MovePosition(transform.position - dir * walkSpeed);

    }

    #endregion

}

 

然后在Capsule物體上添加Rigidbody組件,并調(diào)整參數(shù)。

做到這一步驟,Capsule已經(jīng)可以移動(dòng)旋轉(zhuǎn)了。接下來(lái)做第一人稱的實(shí)現(xiàn),將Inspector面板中的Main Camera,然后修改其位置和Capsule位置一致,并將Main Camera拖動(dòng)為Capsule的子物體。

然后在Inspector面板中床架Cube并隨意修改其位置作為參照物。然后點(diǎn)擊運(yùn)行,可以實(shí)現(xiàn)第一人稱的移動(dòng)旋轉(zhuǎn)等操作。

同樣的設(shè)置設(shè)置在VRCamera物體上一樣可以實(shí)現(xiàn)該操作。

上一篇:NOR FLASH和NAND FLASH

下一篇:IIC裸機(jī)開發(fā)過(guò)程

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 萱草花二声部合唱谱| 菊次郎的夏天钢琴曲谱| 玉匣记全文免费| 韩孝周超异能族| 《眷恋》电影在线观看免费| 中转停留| 少女韩国| 韩国最火主播朴曼妮| 瘰螈| 写现代诗| 杜丽莎| 女同视频在线| 成人在线播放视频| 小学生必用头像| 胡克·霍根| 初三化学试卷| 爱上女老师| 古铜| 我爱你再见分集剧情介绍| 幸福年简谱| 次强音| 李多海| 香谱七十二法图大全| 情侣视频| 成龙| 猎兽神兵免费全集在线观看高清版| 美国派7| 最佳李纯信| 我爱你再见演员表| 啊摇篮电影| 叶玉卿电影| 我爱你再见演员表| 美女交配网站| 杨子纯| 刑事侦缉档案2剧情介绍| 欧美动作大片| 怂包| 巢谷传| 中国宇航员遇难| 双重欲望| 非法制裁|