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);
     }  

  }

<<:  [Day7] 报酬率绘图与MDD试算

>>:  D1 安装Django以及尝试玩玩看

[Day 28] LSTM初探

准备资料 etf50_df = pd.read_csv("data/ETF50.csv&q...

认识强大的Python套件:Pandas(下)

今天我们接着继续和DataFrame继续奋斗!先把套件和档案载入: import pandas as...

day3 - 减少预期外的变数, 握在手里的就变多了

storage 选用: redis & scylla & mysql 简介 每件事情的走向...

Day 7 - 扫描 ⇒ 找出漏洞 ⇒ 渗透系统

出於书本 Chapter 4. Hacking Methodology Hosts 扫描起手式 pi...

(30) 试着学 Hexo - 奇淫技巧 - 财富自由

前言 接下来这一篇当作讲讲废话,因此标题也很 X 话,但其实写部落格是真的可以赚一点点钱的唷。 写部...