地圖、角色都建立好之後,就要讓角色移動起來啦!
向量是在坐標系中有方向、大小的值。
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的屬性,每個屬性都有預設好的值。
vector3也有。
每一個在場景中的物件都有Transform,負責存取物件的座標位置、旋轉、縮放。
**常用屬性**
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時間)
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);
}
}
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);
}
}