1. 程式人生 > >遊戲製作之路-憤怒的小鳥-2

遊戲製作之路-憤怒的小鳥-2

接著上一篇的說,首先我想介紹兩種我常用的一個指令碼獲取並改變另一個指令碼的方法或引數的方法。
第一種:find到另一個掛載指令碼的物體,然後getComponent找到指令碼,改變引數。
第二種:單例模式
例如有一個Start.cs

public class Start :MonoBehaviour {
	public static Start _instance;
	pubic static Start Instance {
		get { return _instance }
		}
	private void Awake() {
		_instance = this ;
		}
	void change(){
	}
	void fly(){
	}
}
			

其它指令碼想要使用Start指令碼中的change()方法,直接——instance.change()就ok了,這只是我目前會用的兩個方法,肯定會有更好的實現方法,僅供大家參考。

再說下Unity3d腳步中常用的兩個方法:
Update():每幀被呼叫一次。
FixedUpdate():每隔Time.fixedDeltaTime被呼叫一次。Time.fixedDeltaTime預設是0.02s,可以通過Edit->ProjectSettings->Time來設定。
有時我們想讓一個物體勻速運動,在update中呼叫translate的話,運動會發生卡頓,這是因為受場景渲染的影響,幀率是時刻在變的,所以每段時間運動的有快有慢。
解決方法是乘以Time.deltaTime(每幀之間的時間)作為補償,這樣就和單位時間運動的距離實現同步了,translate的引數其實是距離,而不是方向。
好,我們開始說遊戲,這是我做的第一關在這裡插入圖片描述

在目前掌握的情況分析,在Unity中參與碰撞的物體分2大塊:1.發起碰撞的物體。2.接收碰撞的物體。

  1. 發起碰撞物體有:Rigibody , CharacterController 。
  2. 接收碰撞物體由:所有的Collider 。

工作的原理為:發生碰撞的物體中必須要有“發起碰撞”的物體。否則,碰撞不響應。

比如:牆用BoxCollider ,所以牆與牆之間無反應。

比如:一個帶有Rigidbody屬性的箱子,能落到帶有MeshCollider屬性的地面上。

比如:一個帶有Rigidbody屬性的箱子,可以被一個帶有CharacterController 屬性的人推著跑。

在所有Collider上有一個Is Trigger 的boolean型引數。
當發生碰撞反應的時候,會先檢查此屬性。

當啟用此選項時,會呼叫碰撞雙方的指令碼 OnTrigger***, 反之,指令碼方面沒有任何反應。

當啟用此選項時,不會發生後續物理的反應。反之,發生後續的物理反應。

總結:Is Trigger 好比是一個物理功能的開關, 是要“物理功能”還是要“OnTrigger指令碼”。

下面說一下什麼是剛體 Rigibody
附著了剛體的物體,同時也就擁有了物理行為,有三種類型的rigibody
第一種:Dynamic
設定剛體有動態行為mass:質量kg,drag:空氣阻力,angular drag:扭轉阻力,gravityscale:重力比例;
第二種:kinematic
若啟用,物體將不受力的作用,只能通過直接設定位置,旋轉來操作它;
第三種:Static
靜態的,不受力的作用。