iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
自我挑戰組

用unity製作2DRPG雛形-沒有大野狼的小紅帽系列 第 7

7.unity角色移動(Vector、Transform)

地圖、角色都建立好之後,就要讓角色移動起來啦!

Vector

向量是在坐標系中有方向、大小的值。

Vector2,二維向量,在平面座標系中,與原點的差值。Vector2(x,y)。

Vector3,三維向量,在三維空間中,與原點的差值。Vector3(x,y,z)。

x,y,z是數字,可以寫成整數(int)或浮點數(float ※數字後要加 f,例如 0.0f )。

//向量變數基本用法
Vector2 vec2 = new Vector2(1,0);//int x=1 , int y=0
Vector3 vec3 = new Vector3(1.0f,0.0f,0.5f);//float x=1.0 , float y=0.0 , float z=0.5

Debug.Log(vec2.x); //1
Debug.Log(vec3.z); //0.5

另外補充,Vector有屬性可以使用,直接呼叫就不用設值。(請參閱unity官方文件)

//不需要進行new Vector,可直接呼叫的屬性
Debug.Log(Vector2.up.y); // 1
Debug.Log(Vector2.up);  // (0.0,1.0)

vector2的屬性,每個屬性都有預設好的值。
1.vector2.png
vector3也有。
1.vector3.png


Transform類別

每一個在場景中的物件都有Transform,負責存取物件的座標位置、旋轉、縮放。

2.png

**常用屬性**
transform.Position = new Vector3(0, 0, 0);  //以世界為中心的座標
transform.localPosition = new Vector3(0, 0, 0); //以父物件為中心的座標

**常用方法**
transform.Translate(Vector3.forward * Time.deltaTime);//位移方法
transform.Rotate(xAngle, yAngle, zAngle, Space.Self); //以自身為軸心旋轉
transform.Rotate(xAngle, yAngle, zAngle, Space.World);//軸心取決於世界(scene)

※Time.deltaTime(幀數之間的時差)。(請參閱unity時間)


利用transform.Translate移動(使用位移方法)

private void movement()//方法
	  {   //採用直接改變物件座標的方式
				//一、向右走
     if (Input.GetKey("d"))//輸入.來自鍵盤(“d”)
     {
         this.gameObject.transform.Translate(new Vector2(5, 0) );
     }  //此類別.這個物件.座標系統.位移(delta向量)

				//二、向左走;依照一、的作法會發現物件飆很快,因此要乘上Time.deltaTime來延遲。
		 if (Input.GetKey("a"))
     {
        this.gameObject.transform.Translate(new Vector2(-5, 0) * Time.deltaTime);
     }  
				//向上走 //可以直接使用Vector的屬性Vector2.up,就不需要new一個變數
     if (Input.GetKey("w"))
     {
        this.gameObject.transform.Translate(Vector2.up * Time.deltaTime);
     }  
				//向下走
		 if (Input.GetKey("s"))
     {
        this.gameObject.transform.Translate(Vector2.down * Time.deltaTime);
     }  

  }

利用transform.position(改變物件座標)

public float speed;    //設公開的數度變數,可在unity中設值調整

private void movement()//方法
	  {   //採用直接改變物件座標的方式
				//向右走
     if (Input.GetKey("d"))//輸入.來自鍵盤(“d”)
     {
        this.gameObject.transform.position += new Vector3(speed, 0, 0);
     }  //此類別.這個物件.座標系統.位置(為一個向量值x,y,z)+=這個向量

				//向左走
		 if (Input.GetKey("a"))
     {
        this.gameObject.transform.position -= new Vector3(speed, 0, 0);
     }  
				//向上走
     if (Input.GetKey("w"))
     {
        this.gameObject.transform.position += new Vector3(0, speed, 0);
     }  
				//向下走
		 if (Input.GetKey("s"))
     {
        this.gameObject.transform.position -= new Vector3( 0,speed,  0);
     }  

  }

上一篇
6.unity建立C#腳本
下一篇
8.unity角色移動(剛體Rigidbody2D)
系列文
用unity製作2DRPG雛形-沒有大野狼的小紅帽30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言