人機(jī)交互Input類:
常用的外部設(shè)備主要有:鼠標(biāo)眷昆、鍵盤、手柄汁咏、搖桿亚斋、觸屏、VR手柄攘滩。帅刊。。漂问。赖瞒。女揭。
Input鍵盤輸入方法: ? ?
GetKeyDown檢測鍵盤按下 ? ? ? ? ? ?按下時返回Ture
GetKey檢測鍵盤按住 ? ? ? ? ? ? ? ? ? ? 按住時返回Ture
GetKeyUp檢測鍵盤抬起 ? ? ? ? ? ? ? ? 抬起時返回Ture
用法:
?if(Input.GetKeyDown(keyCode.W)){};
KeyCode.Alpha0 ? ? ? ?數(shù)字(Alpha0代表0以此類推)
KeyCode.A ? ? ? ? ? ? ? ? 字母(KeyCode.W代表A以此類推)
Input鼠標(biāo)輸入方法:
可以用鍵盤的方法:Input.GetKeyDown(KeyCode.Mouse0){}
Mouse0 /左鍵 ? ? ?Mouse1/右鍵 ? ?Mouse2 ?/滾輪
也有自己的方法:
參數(shù): ?0,左鍵; ? ?1,右鍵 ; ? ? ? 2,滾輪 ?栏饮。吧兔。。袍嬉。
GetMouseButton(0)檢測鼠標(biāo)持續(xù)按下? ? ? ? ? ? ? ? 按住鼠標(biāo)返回Ture
GetMouseButtonDown() 檢測鼠標(biāo)按下 ? ? ? ? ? ? ?按下鼠標(biāo)第一幀返回Ture
GetMouseButtonUp()檢測鼠標(biāo)抬起 ? ? ? ? ? ? ? ? ? 松開鼠標(biāo)第一幀返回Ture
mousePosition當(dāng)前鼠標(biāo)屏幕坐標(biāo)
Vector3 position = Input.MousePosition; ????Debug.Log(position);
Input虛擬軸/按鍵:
設(shè)置虛擬軸按鍵面板路徑: ? ? ? Edit->ProjectSetting->Input
詳細(xì)設(shè)置有: ? ? 虛擬按鍵名稱境蔼、描述名稱+-、對應(yīng)按鍵+-伺通、備用按鍵+-箍土、抬起按鍵,值恢復(fù)為0的時間罐监、小于此值涮帘,計為0(僅用于搖桿)、按下按鍵笑诅,值達(dá)到+1或-1的時間调缨、同時按下正負(fù)鍵值為0、+-反轉(zhuǎn)吆你。弦叶。。妇多。伤哺。
GetAxis:獲取軸方法
//獲取虛擬軸上的位移量
float vertical = Input.GetAxis("Vertical");
Vertical:鍵盤豎直軸
例: ?前后行走代碼
if (vertical > 0.1f)
{
gameObject.transform.Translate(Vector3.forward * Time.deltaTime);
}
else if (vertical < -0.1f)
{
gameObject.transform.Translate(Vector3.back * Time.deltaTime);
}
Horizontal:鍵盤水平軸
例:左右行走代碼
if (horizontal > 0.1f)
{
gameObject.transform.Translate(Vector3.right * Time.deltaTime);
}
else if (horizontal < -0.1f)
{
gameObject.transform.Translate(Vector3.left * Time.deltaTime);
}
Mouse X ?鼠標(biāo)水平移動距離 ? ?Mouse Y ? 鼠標(biāo)垂直移動距離 ? ? Mouse ScrollWheel ? ? 獲取鼠標(biāo)滾輪值
例:旋轉(zhuǎn)代碼
//獲取兩個軸上的偏移量
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
//求絕對值
if (Mathf.Abs(horizontal) > 0.1f || Mathf.Abs(vertical) > 0.1f)
{
//轉(zhuǎn)身。
//1.需要旋轉(zhuǎn)的弧度
float a = Mathf.Atan2(horizontal, vertical);
float degress = a * 180 / Mathf.PI;
//2者祖、旋轉(zhuǎn)
gameObject.transform.eulerAngles = new Vector3(0, degress, 0);
//始終向前移動
gameObject.transform.Translate(Vector3.forward * Time.deltaTime);
}
預(yù)設(shè)體: Instantiate?
位置: ?Vector3 ? ?旋轉(zhuǎn): Quaternion
Resources.Load();? 動態(tài)加載資源
Object prefab = Resources.Load("Cube");
1.1立莉、現(xiàn)將這個預(yù)設(shè)體加載到內(nèi)存中
//注意:1:要加載的預(yù)設(shè)體必須放到Resources文件夾下
// ????2:這一步加載得到的結(jié)果是一個Object類型的
Instantiate(prefab);
1.2、實例化一個預(yù)設(shè)體的對象
//注意:這一步得到的結(jié)果其實也是一個Object
GameObject.Instantiate(prefab);
所以七问,如果需要得到一個GameObject,需要強(qiáng)制類型轉(zhuǎn)換 ?【關(guān)鍵字as】
GameObject obj = ?GameObject.Instantiate(prefab) as GameObject;
銷毀:Destroy()
參數(shù):銷毀對象蜓耻、銷毀時間
Destroy(gameObject, 3)延遲銷毀
Destroy(gameObject,)立即銷毀
GameObject.Destroy(gameObject, 3);
碰撞器: ?Collider組件
Collider組件:
碰撞盒編輯 ? Edit Collider、是否設(shè)置為觸發(fā)器械巡、添加物理材質(zhì)刹淌、碰撞體大小中心設(shè)置。讥耗。有勾。。古程。
1蔼卡、關(guān)于碰撞:
如果兩個物體想發(fā)生碰撞,需要具備兩個條件:
1.1:兩個物體都需要有剛體組件
1.2: 兩個物體都需要有碰撞盒子
2挣磨、碰撞盒子 (Collider)
用來描述一個物體真正可以發(fā)生碰撞的部位
種類:BoxCollider雇逞、SpherCollider...........
鼠標(biāo)碰撞回調(diào)方法:
OnMouseEnter(Collision c) ? ?鼠標(biāo)進(jìn)入到碰撞體范圍的第一幀調(diào)用一次
OnMouseOver(Collision c) ? ? 鼠標(biāo)進(jìn)入到碰撞體范圍內(nèi)持續(xù)調(diào)用荤懂,每幀一次
OnMouseExit(Collision c) ? ? ? 鼠標(biāo)離開碰撞體范圍的最后一幀調(diào)用一次
OnMouseDown ? ? ? ? ? ? ? ? ? ? ? ? 在碰撞體范圍內(nèi)按下時,調(diào)用一次
OnMouseDrag ? ? ? ? ? ? ? ? ? ? ? ? ?在碰撞體范圍內(nèi)按下喝峦,持續(xù)調(diào)用,每幀一次
OnMouseUp ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?在碰撞體范圍內(nèi)按下呜达,抬起鼠標(biāo)左鍵谣蠢,調(diào)用一次
OnMouseUpAsButton ? ? ? ? ? ? ? 在碰撞體范圍內(nèi)按下并抬起,執(zhí)行一次查近。
碰撞檢測:
回調(diào)方法:
OnCollisionEnter(Collision other) ? ? 碰撞開始一瞬間時調(diào)用
OnCollisionStay(Collision other) ? ? ?碰撞過程中相對運動時持續(xù)調(diào)用眉踱,每幀一次
OnCollisionExit(Collision other) ? ? ? 碰撞分離一瞬間時調(diào)用
回調(diào)方法參數(shù): Collision
collider:當(dāng)前物體所碰撞到的游戲?qū)ο?游戲?qū)ο蟮呐鲎财鹘M件)
contacts[]:所有碰撞點的信息 ? normal、 ?point(碰撞點坐標(biāo))霜威、Vector3
Trigger觸發(fā)器:
觸發(fā)事件產(chǎn)生的條件:兩個物體都有碰撞體谈喳,至少有一個帶有剛體,兩個碰撞體其中有一個是觸發(fā)器戈泼。
使用代碼來設(shè)置Trigger
//gameObject.GetComponent().isTrigger = true;
Collision表示碰撞
//c.gameObject獲取與當(dāng)前物體發(fā)生碰撞的物體
假如不希望兩個物體發(fā)生物理上的碰撞婿禽,但是還要檢測是否接觸到了一起
//可以給一方的Collider組件設(shè)置Trigger
//添加Trigger如果需要捕獲到碰撞,需要執(zhí)行的以下的回調(diào)
需要觸發(fā)器啟用才能用下面的方法
回調(diào)函數(shù):
void ?OnTriggerEnter(Collider c)
{
Debug.Log("進(jìn)入觸發(fā)器的時候調(diào)用一次");
}
void ?OnTriggerStay(Collider c)
{
Debug.Log("處于某個觸發(fā)器之中的時候持續(xù)調(diào)用大猛,每幀一次");
}
void ? OnTriggerExit(Collider c)
{
Debug.Log("退出觸發(fā)器的時候調(diào)用一次");
}
剛體: RigidBody屬性
作用:完成逼真物理效果的物理組件扭倾,重力、阻力挽绩、作用力和反作用力等膛壹。
主要屬性有:速度[velocity]、角速度[angularVelocity]唉堪、阻力[drag]模聋、角阻力[angularDrag]、是否使用重力[useGravity]唠亚、是否開啟動力學(xué)[isKinematic]链方、插值運算(內(nèi)插值、外插值)灶搜、碰撞檢測[collisionDetectionMode](間隔檢測侄柔、連續(xù)檢測、間隔連續(xù)交替)占调、約束(位置約束暂题、角度約束)。
注意:對物體的操作使用Transform組件究珊,要么使用RigidBody組件,不要混合使用
常用方法:
private Rigidbody r;
r = gameObject.GetComponent(); ? 獲取組件
AddForce:
//通過給一個物體添加一個力薪者,來實現(xiàn)物體的移動
//是相對于世界坐標(biāo)的力
//給一個物體移動的力
//r. AddForce(Vector3.forward * 1000);
AddRelativeForce:
//給一個物體添加一個力
//是相對于自身坐標(biāo)的
// r. AddRelativeForce(Vector3.forward * 500);
AddTorque:
//給一個物體添加一個力矩
//給一個物體旋轉(zhuǎn)的力
//相對于世界坐標(biāo)
//r. AddTorque(Vector3.forward * 500);
AddRelativeTorque:
//給一個物體添加一個力矩
//相對于自身坐標(biāo)
//r. AddRelativeTorque(Vector3.forward * 500);
AddExplosionForce:
//需要給每個要爆炸的物體添加上爆炸的腳本
//添加一個爆炸力
//第一個:表示力的大小
//第二個:爆炸中心點
//第三個:爆炸半徑
r.AddExplosionForce(1000, new Vector3(20, 1, 20), 1000);