天天看點

遊戲制作之路-憤怒的小鳥-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的參數其實是距離,而不是方向。

好,我們開始說遊戲,這是我做的第一關

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

在目前掌握的情況分析,在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

靜态的,不受力的作用。

繼續閱讀