成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

unity3鼠標(biāo)點(diǎn)擊移動

這個(gè)總共可以分為三個(gè)部分:
第一:如何取得目標(biāo)地點(diǎn)
第二:看向目標(biāo)地點(diǎn),并向其移動
第三:障礙物判斷
我們先看第一個(gè)問題如何獲得目標(biāo)點(diǎn):首先打開unity3d,新建一個(gè)工程檔。
創(chuàng)建一個(gè)Cube調(diào)整大小,制作成地面的形式,并修改名稱為“ floor ”把攝像機(jī)調(diào)整到適合的角度。
創(chuàng)建一個(gè)C#腳本,命名為“Pathfinding ”。
在腳本中輸入以下代碼:
void Update ()
        {
                
                //當(dāng)單機(jī)鼠標(biāo)時(shí)
                void Update ()
        {
                
                if(Input.GetMouseButtonDown(0))
                {

                          //定義一條從主相機(jī)射向鼠標(biāo)位置的一條射向
                        Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
                        RaycastHit hit;
                        //判斷射線是否發(fā)生碰撞                
                        if (Physics.Raycast(ray, out hit, 100))
                        {
                                //判斷碰撞物體是否為floor
                                if(hit.collider.gameObject.name=="floor")
                                {

                                        //打印出碰撞點(diǎn)的坐標(biāo)
                                        Debug.Log(hit.point);
                                }
                        }
                }
           }
將代碼添加到我們的相機(jī)物體上,運(yùn)行游戲,鼠標(biāo)在我們創(chuàng)建的地面上點(diǎn)擊,控制臺就會輸出點(diǎn)擊點(diǎn)的坐標(biāo),
通過上面的簡單的例子,我們就可以得到目的點(diǎn)的坐標(biāo),具體做法:當(dāng)我們點(diǎn)擊鼠標(biāo)時(shí),從我們的攝像機(jī)朝我們鼠標(biāo)的方向發(fā)射一條射線,當(dāng)射線與地面發(fā)生碰撞時(shí),輸出碰撞點(diǎn)的坐標(biāo),這個(gè)坐標(biāo)就是鼠標(biāo)點(diǎn)擊到地面的點(diǎn)的坐標(biāo),也就是目標(biāo)點(diǎn)坐標(biāo)。
  坐標(biāo)點(diǎn)已經(jīng)找到了,下面一部就是要讓我們的游戲物體看向這個(gè)坐標(biāo)點(diǎn),
  有一種簡單的方法就是直接讓我們的主角lookat這個(gè)坐標(biāo)點(diǎn)。
  下面我們新建一個(gè)游戲?qū)ο螅鳛槲覀兊闹鹘遣⑿薷拿Q為“person”;
   補(bǔ)充腳本如下:
   private GameObject play;        
        void Start ()
        {
                play=GameObject.Find("person");
        }
        // Use this for initialization
        void Update ()
        {
                
                if(Input.GetMouseButtonDown(0))
                {
                        Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
                        RaycastHit hit;
                                        
                        if (Physics.Raycast(ray, out hit, 100))
                        {
                                
                                if(hit.collider.gameObject.name=="floor")
                                {
                                        Debug.Log(hit.point);
                                        play.transform.LookAt(hit.point);
                                        
                                }
                        }
                }

             }
運(yùn)行游戲,當(dāng)我們點(diǎn)擊地面時(shí),游戲物體旋轉(zhuǎn)方向看向我們點(diǎn)擊的點(diǎn),
這樣做有一個(gè)問題,主角會瞬間旋轉(zhuǎn)到我們需要的角度,我們現(xiàn)在要控制他的旋轉(zhuǎn)速度,讓其緩慢旋轉(zhuǎn)。
這就要用到另外一種做法;用到四元數(shù)組transform.rotation = Quaternion.Slerp (from.rotation, to.rotation,Time.time * speed);
from.rotation為初始角度,
to.rotation為目標(biāo)角度
  speed為旋轉(zhuǎn)速度,
利用者個(gè)方法,我們就可以實(shí)現(xiàn)讓物體緩慢旋轉(zhuǎn)到我們要的指定角度,
具體做法,新建一個(gè)空物體,命名為To_rotation,將其作為person 物體的子物體,
代碼補(bǔ)充如下:
        public Transform to;
        public float speed = 5F;
        private GameObject play;
        
        void Start ()
        {
                play=GameObject.Find("person");
                to=GameObject.Find("To_rotation ");
               
        }
        // Use this for initialization
        void Update ()
        {
                
                if(Input.GetMouseButtonDown(0))
                {
                        Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
                        RaycastHit hit;
                                        
                        if (Physics.Raycast(ray, out hit, 100))
                        {
                                
                                if(hit.collider.gameObject.name=="floor")
                                {
                                        Debug.Log(hit.point);
                                        //點(diǎn)擊地面后解除to的父子關(guān)系;并讓我lookat目標(biāo)點(diǎn);
                                        to.transform.parent = null;
                                        to.LookAt(hit.point);
                                }
                        }
                }

                //如果我們的play 的旋轉(zhuǎn)角度與to的角度相同,則恢復(fù)其父子關(guān)系,并將其坐標(biāo)歸零
                if(play.transform.rotation==to.rotation)
                {
                        to.transform.parent=play.transform;
                        to.transform.localPosition = new Vector3(0, 0, 0);


                }
                else

                       //如果play  與to的角度不同,則旋轉(zhuǎn)play至to所在的角度
                        play.transform.rotation = Quaternion.Slerp(play.transform.rotation, to.rotation, speed);
                        

        }
執(zhí)行代碼,的到我們想要的效果;

“只有客戶發(fā)展了,才有我們的生存與發(fā)展!”這是創(chuàng)新互聯(lián)建站的服務(wù)宗旨!把網(wǎng)站當(dāng)作互聯(lián)網(wǎng)產(chǎn)品,產(chǎn)品思維更注重全局思維、需求分析和迭代思維,在網(wǎng)站建設(shè)中就是為了建設(shè)一個(gè)不僅審美在線,而且實(shí)用性極高的網(wǎng)站。創(chuàng)新互聯(lián)對成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)站開發(fā)、網(wǎng)頁設(shè)計(jì)、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)推廣、探索永無止境。

 

文章標(biāo)題:unity3鼠標(biāo)點(diǎn)擊移動
文章起源:http://jinyejixie.com/article38/ppispp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、營銷型網(wǎng)站建設(shè)、建站公司、網(wǎng)站維護(hù)、移動網(wǎng)站建設(shè)、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)
安乡县| 东阳市| 江华| 外汇| 霍山县| 视频| 文化| 嘉兴市| 平舆县| 平江县| 嘉祥县| 镇宁| 收藏| 普格县| 横峰县| 龙井市| 阿克陶县| 石屏县| 义乌市| 辽宁省| 鄯善县| 林芝县| 勃利县| 鹤庆县| 包头市| 年辖:市辖区| 宁明县| 罗山县| 襄樊市| 和政县| 个旧市| 镇康县| 蓝山县| 会同县| 若尔盖县| 隆化县| 广西| 环江| 勐海县| 内乡县| 三门县|