成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Unity3D研究之角色控制器組件研究

移動開發(fā) iOS 游戲開發(fā)
Unity3D 封裝了一個非常好用的組件來實現(xiàn)第一人稱視角與第三人稱視角游戲開發(fā),我們稱他為角色控制器組件,幾乎不用寫一行代碼就可以完成一切的操作,神奇吧。

使用它的方法如下,首先打開Unity游戲引擎編輯器,然后在Project視圖中右鍵選擇Import Package -> Charactr Controller(角色控制器)把它導入我們的工程中。如下圖所示,第一人稱與第三人稱的組建已經加入Project視圖中。3rd Person Controller 表示第三人稱控制器,F(xiàn)irst Person Controller表示第一人稱控制器。

如下圖所示,我們將FirstPerson Controller拖拽入Hierarchy(層次視圖)中。由于角色控制器是具有一定物理引擎的,所以一定要將它放在地形或面對象之上,否則當它接收物理效果時發(fā)現(xiàn)地面沒有東西支撐它,它就會掉下去。然后運行游戲你就會發(fā)現(xiàn)和CS中的第一人稱效果非常相像, W、S、A、D移動人物行走,移動鼠標更改行走的方向,空格鍵人物會跳躍。  

第一人稱視角的實現(xiàn)原理是在游戲場景中創(chuàng)建了一個膠囊體的游戲對象,并且給膠囊體對象身上綁定了一個攝像機,攝像機對象如下圖所示,它綁定在”Person Controller”中。這時場景中默認的攝像機就會失效,可以直接刪掉默認的攝像機。通過按鍵控制這個膠囊體移動,通過鼠標修改膠囊體的朝向,此時你就會發(fā)現(xiàn)第一人稱視角已經完全實現(xiàn),目前為止我們不需要編寫一行代碼。目前場景中的天空盒子我是使用skyBox組件綁定在攝像機中,因為第一人稱視角的攝像機對象在”Person Controller”中,所以需要將SkyBox組件綁定在這個攝像機中,如果綁定在默認攝像機中那么你將不會看到天空的效果。

下面我們在看看第三人稱視角,如下圖所示,在Project視圖中將3rd Person Controller拖拽入Hierarchy視圖中。第三人稱視角需要使用我們原有的攝像機,如果剛剛將攝像機的刪掉的話。在Hierarchy視圖中點擊Creat->Camera 即可。然后選擇攝像機,在右側Inspector視圖中設置它的tag為MainCamera,如下圖所示。最后在Hierarchy視圖中選擇3rd Person Controller,在右側Inspector視圖中將Third Person Camera 腳本的 Camera Transform 變量綁定上剛剛創(chuàng)建的主攝像機,此時運行游戲后以第三人稱視角移動主角行走與跳躍,攝像機永遠都會在跟隨在后面除非修改角色控制器組件中默認提供的源碼,源碼都在右側監(jiān)測面板視圖中直接點開就可以查看。

下面我們學習角色控制器組件在其它模型之間的應用。首先在Hierarchy視圖中創(chuàng)建兩個Cube(立方體對象) 命名為:Cube0(發(fā)出碰撞的對象)Cube1(接收碰撞的對象),然后在Hierarchy視圖中選擇Cube0對象,接著Unity導航菜單欄中選擇Component(組件)-Character->選擇任意一個角色控制屬性。 補充一句,角色控制器組件一定要在Project視圖中導入,否則這里將無法綁定組件。角色控制器組件因為與碰撞組件相互沖突,所以添加角色控制器組建后 Collider組件就會消失。下面我們實現(xiàn)一段簡單得代碼,使用添加過角色控制器組件的Cube0 去碰撞未添加角色控制器組件的Cube1。

[代碼]java代碼:

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

	//主動碰撞的對象名稱
	string castName = null;

	//接收碰撞的對象名稱
	string receiveName = null;

	void OnGUI ()
    {

		if(castName!= null && receiveName !=null)
		{
			//設置顯示的顏色為黑色
			GUI.color = Color.black;
 		    //顯示主動碰撞的對象 與接收碰撞的對象名稱
	    	GUI.Label(new Rect(100,100,200,30),"主動碰撞的對象名稱"+castName);
	    	GUI.Label(new Rect(100,200,200,30),"接收碰撞的對象名稱"+receiveName);
		}
	}

	//角色控制器組件在與具有Collider組件對象之間的碰撞
	void OnControllerColliderHit(ControllerColliderHit hit)
	{

		//得到接收碰撞名稱
		GameObject hitObject = hit.collider.gameObject;

		//當它不是地面時間
		if(!hitObject.name.Equals("Terrain"))
		{
			//得到主動碰撞的對象 與接收碰撞的對象名稱
			castName = gameObject.name;
			receiveName = hitObject.name;
		}	

	}

}

 將上面這段代碼綁定在Cube0中,運行游戲后W、A、S、D按鍵來控制Cube1立方體移動。當Cube0與Cube1發(fā)生碰撞時,程序將進入方法 OnControllerColliderHit(),通過參數(shù)就可以得到接收碰撞的游戲對象也就是Cube1對象,而gameObject就是當前主動發(fā)生碰撞的Cube1。如下圖所示,當兩個立方體碰撞時使用GUI已經將碰撞的信息打印出來。

接著我在說說剛體組件,默認在Unity中創(chuàng)建的模型是不具備接收物理引擎的,除非給模型添加剛體組件或角色控制器組件。我們先說說剛體,還用奮斗的小鳥來舉例子。發(fā)射小鳥以后,小鳥以一個拋物線軌跡去撞擊物體,發(fā)生碰撞后被碰撞的物體會根據(jù)小鳥撞擊的角度以及力度發(fā)生不同的物理效果,并且?guī)缀跏峭耆M真實的物理引擎。但是這種物理引擎的效果不能綁定在比如RPG游戲的主角身上。原因很簡單,因為剛體所添加的物理引擎太過于真實以至于會影響用戶的對主角的操作,舉個例子比如用戶在控制主角移動時他碰撞到質量較大的物體,根據(jù)真實的物理引擎會被這個物體的反彈力把主角反彈回原位。但是這個是不符合邏輯的,因為剛體組件太過于物理話了,所以我們需要給主角添加角色控制器組件,它操作起來比較靈活,更容易讓我們操作主角。

下面我們給Cube1對象綁定剛體組件,選擇Cube1對象然后在導航菜單欄中選擇Component->physics ->Rigidbody(剛體)。我們看看下面這段代碼,使用添加了角色控制器組件的Cube0 去碰撞添加剛體組件的Cube1,當他生碰撞時計算一下Cube0碰撞Cube1時的碰撞角度向量,然后通過剛體向他施加一個力把它推開。

[代碼]java代碼:

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

	//角色控制器組件在與具有Collider組件對象之間的碰撞
	void OnControllerColliderHit(ControllerColliderHit hit)
	{

		//判斷碰撞的對象是否具備剛體組件
		GameObject hitObject = hit.collider.gameObject;
		Rigidbody rigidbody = hitObject.rigidbody;
		if(rigidbody != null && !rigidbody.isKinematic)
		{
			//地面也具備剛體組件,這里判斷一下
			if(!hitObject.name.Equals("Terrain") )
			{
				rigidbody.AddForce(new Vector3(hit.moveDirection.x, 0, hit.moveDirection.z) * 10);
			}
		}

	}

}

也可以將同樣的腳本直接綁定在第三人稱的角色控制器組件中。如下圖所示,主角移動將周圍的箱子都推開了。

總的來說角色控制器組件適用于 既需要感應物理引擎的支持但是又不能完全依賴與物理引擎,需要自己代碼去編寫一些東西的模型,所以非常適合游戲中主角對象的使用。雨松MOMO祝大家學習愉快,哇咔咔。

責任編輯:冰凝兒
相關推薦

2012-12-24 09:15:57

iOSUnity3D

2012-12-24 09:20:48

AndoidUnity3D

2012-12-24 09:11:58

iOSUnity3D

2012-12-24 09:09:27

AndoidUnity3D

2012-12-24 09:17:12

iOSUnity3D

2012-12-24 09:08:14

iOSUnity3D

2012-12-24 09:19:31

iOSUnity3D

2014-04-17 11:05:30

2012-12-24 09:21:45

iOSUnity3D

2012-12-24 09:14:31

ios

2011-07-12 09:29:10

主域控制器備份域控制器

2013-04-25 09:56:24

unity3D手機游戲引擎

2012-12-24 09:55:15

iOSUnity3D

2013-04-25 10:03:07

unity3D手機游戲引擎

2012-12-24 08:52:44

iOSUnity3D

2012-12-24 09:18:22

iOSUnity3D

2013-04-25 13:27:11

unity3D手機游戲引擎

2013-04-25 09:08:39

unity3D手機游戲引擎

2013-04-09 13:42:23

Unity3D基礎知識梳理

2012-12-24 08:54:47

iOSUnity3D
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产日韩精品在线 | 精品视频一区二区三区在线观看 | 成人超碰 | 国产999精品久久久久久绿帽 | 成人激情免费视频 | av大片在线观看 | 中国人pornoxxx麻豆 | 一区二区在线 | 亚洲综合在线一区二区 | av在线免费看网址 | 成人免费一区二区三区牛牛 | 欧美在线观看一区二区 | 电影91久久久| 久久人人网 | 国产电影一区二区在线观看 | 亚洲精品久久久久国产 | 亚洲福利视频一区二区 | 在线观看视频亚洲 | 超碰97干 | 91高清在线观看 | 久久久一二三区 | www.日本三级| 国产成人久久精品 | 欧美 日韩 在线播放 | 日韩中出 | 欧美综合久久 | 久久精片 | 操人视频在线观看 | 欧美亚洲激情 | 黑人成人网 | 日韩三级在线 | 天天干 夜夜操 | 免费观看一级毛片 | 黄色片网此 | 日本福利片 | 欧美午夜一区 | 日日网| 黄色香蕉视频在线观看 | 成年免费大片黄在线观看岛国 | 最新国产精品 | 久久久久久久久久久丰满 |