Unity3D 2D入門——第5天

第4天讓狗吃了大笑.....


今天我們終於走到了正點上:關於C#腳本中對對象的基本操作

我們先推薦一個博主:大學霸,這是鏈接

http://my.oschina.net/u/1585857/blog?catalog=470833&p=2&temp=1468725572314

他列表中2015年有許多關於Unity3D的東西可以看


然後再推薦另外一個博主,脫莫柔,她貌似一直在做Unity3D方面的東西,下面是鏈接

博客園(搬家前)

http://www.cnblogs.com/fortomorrow/

CSDN(搬家後)

http://blog.csdn.net/asd237241291


今天完成的內容很簡單,在下面這篇博客裏完全包含:

http://www.cnblogs.com/fortomorrow/archive/2012/10/30/unity05.html


一、物體的移動、縮放、旋轉

移動很簡單,爲物體添加剛體組件,然後在腳本的 Start() 方法中添加如下代碼,即可完成速度的設置,程序會自動運行它的運動過程

GetComponent<Rigidbody2D>().velocity = new Vector2(-1, 0);
縮放和旋轉則不一樣,是通過對物體的 transform 屬性進行修改完成的,所以都放在了 Update() 方法下面,代碼如下

transform.Rotate(new Vector3(0, 0, 3)); /// 完成旋轉,這個 x, y, z 分別指的是
					/// 繞 “對應軸” 旋轉的角度
					/// 我做的是2D的,所以都是繞着 z 旋轉的

transform.localScale += 0.001f*(new Vector3(1, 1, 0));  /// 完成縮放
							/// 同樣,向量中 X,Y,Z 分別爲對應軸的縮放

這裏來說明下不放在 FixedUpdate() 中,因爲 FixedUpdate() 方法是物理引擎更新的地方,也就是說如果要修改上面的速度的話,就應該放在 FixedUpdate() 裏頭,因爲是物理引擎中“剛體”的屬性。


二、輸入的獲取

1.輸入指定按鍵

//按下鍵盤“上方向鍵”
if(Input.GetKey ("up"))
  print("Up!");

//按下鍵盤“W鍵”
if(Input.GetKey(KeyCode.W);)
  print("W!");

也就是說,對於按鍵的判定爲 bool 型。

2.鼠標控制

//按下鼠標左鍵(0對應左鍵 , 1對應右鍵 , 2對應中鍵) 
if(Input.GetMouseButton(0))
  print("Mouse Down!");
Input.GetAxis("Mouse X");//鼠標橫向增量(橫向移動) 
Input.GetAxis("Mouse Y");//鼠標縱向增量(縱向移動)
對於鼠標按鍵的判定也是 bool 型。

倒是獲取鼠標位移還算正常,返回值爲?int?

3.獲取軸:

//水平軸/垂直軸 (控制器和鍵盤輸入時此值範圍在-1到1之間)
Input.GetAxis("Horizontal");//橫向 
Input.GetAxis ("Vertical");//縱向

返回值類型???


鼠標和獲取軸沒做,不要怪我,我也很努力的在完成另外一個問題,暫時沒有解決。等解決了自然會把這裏補上的,今天就這些,苦逼的週日的下午,一直沒找到解答。。。。。


(續)終於解決了這個問題,先給鏈接,再進行描述:

http://blog.okbase.net/unity3d/archive/4611.html

非常感謝這位仁兄給的教程,順便吐槽下百度。。。真的不行,搜索 Sprite.Create 失敗,竟然全都是 Sprite.Create 怎麼用,哼,最後還是依靠了 Bing 和yaHoo 走回來的,我都跑 Unity 論壇上去發帖了,大哭


爲題描述如下:我要做動畫,而我希望的完成方式是,有N幅圖像,每隔一段時間切換一張,用這種非常原始的方式完成動畫

我的環境:VS2013 + Unity3D 5.3


那麼首先,我的資源是這樣的



拖入 Unity 的資源管理器後,是這樣的


然後呢,我希望它是3幀的,處理一下,在右上角將 Sprite Mode 修改爲 Multiple(多精靈),然後點擊下圖中 Sprite Editor 進行處理(它會提示是否保存,點擊保存,因爲剛剛修改爲Multiple了)


進入 Sprite Editor 後,如下圖,左上角 | slice ♦ | Trim|,點開 slice,就可以看到左上角彈出窗口了,點擊 Slice即可完成自動分割,圖中可以看到我分割的結果,三個圓都有一個矩形框。右下角彈出窗口是選中框的狀態信息。


退出 Splice Editor,點擊應用即可,那麼,圖片處理好了,我們在 Project 創建一個 C#腳本,雙擊即可打開 VS,代碼如下

public class StateCake : MonoBehaviour {

	public int num = 0; /// 選擇圖片序號
	public int counter = 0; /// COUNTER 計數器
	public Sprite[] sprites; /// 這個就是存儲我們剛剛處理的幾張圖像的地方,精靈數組
	private SpriteRenderer render; /// 這個是存放渲染器的地方

	// Use this for initialization
	void Start () {
		render = GetComponent<Renderer>() as SpriteRenderer; /// 初始化時,我們獲取對象的渲染器
		
	}
	// Update is called once per frame
	void Update () {
		counter += 1;
		if(counter>60)
		{
			counter = 0;
			num += 1; 
			if(num>2)
			{
				num = 0;
			}<span style="font-family:Arial, Helvetica, sans-serif;"> /// 前面是用來選擇圖片的代碼</span>
			else if(0 == num)
			{
				render.sprite = sprites[0]; /// 選擇精靈,賦值給渲染器
			}
			else if(1 == num)
			{
				render.sprite = sprites[1];
			}
			else if (2 == num)
			{
				render.sprite = sprites[2];
			}
		}
	}
}
代碼很明朗,就是切換三個圖片的。保存關閉VS,回到Unity。接下來在Hierarchy創建一個 2D Object -> Sprite,我們取名爲 StateCake,然後將腳本拖拽並放到它上面。可以看到 StateCake 現在就有這些組件:

首先是沒有標紅的 Transform 組件,就是前面操作旋轉和縮放的組件,

然後是 Sprite Renderer,就是代碼裏面初始化時獲取的渲染器組件,那麼 Sprite 屬性值,就是更新中我們賦值的那個屬性了

最後是 State Cake 組件,可以看到標註了 ( Script ),就說明是腳本組件了。看底下的參數,正是我們定義的 Num, Counter,以及 Sprites(尺寸暫時爲0)。

接下來就是最最最關鍵的一個步驟了,爲了這個步驟我可是折騰了一個下午。點右上角的鎖定,那麼當你切換選擇時 Inspector 保持在 StateCake對象上。後面的操作看下面的圖,邊看邊講:


剛剛製作的圖,右邊有個三角點開,選擇全部三個圖片(紅框內:選擇第一個,按住shift,再選擇最後一個)

然後,拖拽到右邊藍色區域內,則會自動添加進去(就這個拖拽!拖拽!拖拽!一下午加上一晚上啊大哭

然後可以看到右邊紅框內,就添加進去三個圖片了,此時運行程序,就可以看到餅在變了。


終於搞定了,好開心,好充實的一天。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章