Unity3D 常用核心類

MonoBehaviour是所有脚本的基类,使用C#必须显式从MonoBehaviour继承。

常用函数回顾:第一章  1.7

  1. Transform

变换

Transform组件是Unity3D的重点之一,主要用于控制物体的旋转、移动、缩放。

API:application program interface  应用程序接口

1)成员变量

A、transform.position位置移动

transform.position = new Vector3(+10, 0, 0);

B、transform.rotation旋转角度

transform.rotation = Quaternion.Euler(0, 45, 0);

C、transform.localScale 自身缩放

transform.localScale=new Vector3(2,1,1);

  1. 成员方法

A、Translate (translation : Vector3, relativeTo : Space = Space.Self) : void

向某方向移动物体多少距离。

如果要操作脚本当前的gameObject,则可以省略不写要操作的gameObject。
例如:

transform.Translate(Vector3.up)

让游戏对象沿着vector3向量的垂直方向移动

向前移动

transform.Translate(Vector3.forwad);

transform.Translate(new Vector3(0,0,1));

transform.Translate(0,0,1);

B、Rotate (eulerAngles : Vector3, relativeTo : Space = Space.Self) : void

旋转

游戏对象围绕Y轴旋转

transform.Rotate(new Vector3(0,1,0));

C、RotateAround (point : Vector3, axis : Vector3, angle : float) : void

按照多少度在世界坐标的某位置轴旋转物体。

一个游戏对象围绕另一个游戏对象旋转

transform.RotateAround(sphere.position,Vector3.up,1)

transform.rotationRotate的区别:

Rotate()方法是:旋转多少度。在原有的基础上累加,即旋转了多少角度

rotation属性是:旋转到某个角度,就是是在update中每帧都执行。但每次旋转到的角度都是5,所以是旋转到5度。

比如你只想让他旋转到多少, 用rotation; 假如想让他一直转,可以用Rotate

rotation直接改变了数值, 以达到旋转效果

Rotate应用一个的旋转角度每秒1度慢慢的旋转物体

  1. Vector3

Unity3D_向量(Vector3)数学基础_bobo553443的博客-CSDN博客_vector3

向量(Vector3)

既有大小又有方向的量叫做向量。在空间中,向量用一段有方向的线段来表示。

可用于描述具有大小和方向两个属性的物理量,例如物体运动的速度、加速度、摄像机观察方向、刚体受到的力等都是向量。

如果v1和v2都表示一个向量的话,那么v3是一个从v1的尾部指向v2的头部的一个带有方向箭头的一条射线

案例:立方体位置相加

    public Transform a;

    public Transform b;

    public Transform c;

    void Update ()

{

        b.position = new Vector3(5, 0, 0);

        c.position = new Vector3(-5, 0, 0);

        a.position = b.position + c.position;

    }

  1. GameObject

GameObject和gameObject的区别

GameObject是游戏对象类的基类

gameObject是脚本挂载的对象

案例1:脚本在摄像机上面挂载

    public GameObject cube;

    void Update ()

{

        cube.transform.localScale += new Vector3(1, 0, 0);

    }

案例2:脚本在自身上面挂载

    void Update ()

{

        //gameObject.transform.localScale+= new Vector3(1, 0, 0);

transform.localScale+= new Vector3(1, 0, 0);

    }

  1. Time

Time.time:表示从游戏开始到现在的时间,会随着游戏的暂停而停止计算。

Time.deltaTime:表示从上一帧到当前帧的时间,以秒为单位。

Time.timeScale:时间缩放,默认值为1,若设置<1,表示时间减慢,若设置>1,表示时间加快,可以用来加速和减速游戏,非常有用。

案例1用deltaTime控制对象移动

    public GameObject cube;

    float speed = 3f;

    void Update ()

{

        cube.transform.Translate(Vector3.forward * Time.deltaTime * speed);

}

案例2:用timeScale对游戏进行加速、减速或暂停等操作

int i = 0;

    public void GoForward()

    {

        i++;

        if (i % 2 != 0)

        {

            Time.timeScale = 1;

        }

        else

        {

            Time.timeScale = 0;

        }

 }

void Update ()

{

        cube.transform.Translate(Vector3.forward * Time.deltaTime * speed);

}

  1. 克隆游戏对象

//在预设体的位置克隆游戏对象

GameObject go1=Instantiate(cube);

//在固定位置克隆游戏对象

//Quaternion.identity 游戏对象不旋转:Quaternion(0,0,0,0)

GameObject go2 =Instantiate(cube,new Vector3(0,0,5),Quaternion.identity);

  1. 销毁游戏对象

Destroy(go1);    //直接销毁对象go1

Destroy(go2,3);   //停3秒后销毁对象go2

  1. 查找游戏对象

通过名称来查找游戏对象

GameObject  cube1=GameObject.Find("Player");

GameObject  cube2=GameObject.FindWithTag("Player");

  1. 添加、获取组件

//1、把Move这个脚本加到cube这个游戏对象上

cube.AddComponent("Move");

//2、给游戏物体添加刚体

cube.AddComponent("Rigidbody");

//3、给游戏物体添加球体碰撞器

cube.AddComponent("BoxCollider");

//1、获取脚本组件Move

Move m=cube.GetComponent<Move>();

//2、获取刚体组件

Rigidbody r=cube.GetComponent<Rigidbody>();

  1. Random

float a=Random.value;                //返回0.0(包括)到1.0(包括)之间的数。
    int b=Random.Range(0,100) ;         //包括最小但不包括最大

float c=Random.Range(0.0f,5.5f);    //包括最大和最小
 

  1. Input
  1. 鼠标事件

GetMouseButton(0):按下鼠标左键不动,程序会一直运行,松开左键程序停止运行。

GetMouseButton(2):按下鼠标中键不动,程序会一直运行,松开中键程序停止运行。

GetMouseButton(1):按下鼠标右键不动,程序会一直运行,松开右键程序停止运行。

GetMouseButtonDown(0):按下鼠标左键时,程序运行一次

GetMouseButtonDown(1):按下鼠标右键时,程序运行一次

GetMouseButtonUp(2):按下鼠标中键时,程序不运行,松开中键时,程序运行一次。

if(Input.GetMouseButton(0)){

   执行语句;

}

  1. 键盘事件

GetKey     当通过名称指定的按键被用户按住时返回true

GetKeyDown   当用户按下指定名称的按键时的那一帧返回true。

GetKeyUp    在用户释放给定名字的按键的那一帧返回true。

GetAxis("Horizontal")和GetAxis("Vertical")    水平轴和垂直轴

if(Input.GetKey("Down")){

   执行语句;

}

案例:用方向键或WASD键来模拟物体移动

float speed = 3f;

   

    void Update () {

        //float h = Time.deltaTime * speed;

        //按下WSAD键使游戏对象前后左右移动

        /*if (Input.GetKey(KeyCode.A))

        {

            transform.Translate(new Vector3(-h, 0, 0));

        }

        if (Input.GetKey(KeyCode.D))

        {

            transform.Translate(new Vector3(h, 0, 0));

        }

        if (Input.GetKey(KeyCode.W))

        {

            transform.Translate(new Vector3(0, 0, h));

        }

        if (Input.GetKey(KeyCode.S))

        {

            transform.Translate(new Vector3(0, 0, -h));

        }*/

        //Horizontal

        //Vertical

        float h= Input.GetAxis("Horizontal")*Time.deltaTime*speed;

        float v = Input.GetAxis("Vertical") * Time.deltaTime * speed;

        //transform.Translate(h, 0, v);

        transform.Translate(new Vector3(h, 0, v));

    }

  1. 自定义按钮

GetButton   根据按钮名称返回true当对应的虚拟按钮被按住时。

GetButtonDown  在给定名称的虚拟按钮被按下的那一帧返回true。

GetButtonUp    在用户释放指定名称的虚拟按钮时返回true。

案例:点击鼠标左键,给物体加一个力

if (Input.GetButtonDown("Fire1"))

        {

            GameObject go = Instantiate(cube);

            Rigidbody r = go.GetComponent<Rigidbody>();//从预设体身上获取刚体组件

            r.AddForce(0,0,10000);//给预设体加力

    }

  1. 协程

协同程序,即将主程程序运行时同时开启另一段逻辑处理来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。   

使用StartCoroutine(string methodName)可以开启一个线程。

Yield语句是一种特殊类型的Return(返回)语句,它可以确保函数在下一次被执行时,不是从头开始,而是从Yield语句处开始。

协程其实就是一个IEnumerator(迭代器)。迭代器方法运行到 yield return 语句时,会返回一个表达式并保留当前在代码中的位置。 当下次调用迭代器函数时执行从该位置重新启动。

案例:每隔3秒克隆一个立方体

public GameObject cube;

    void Start () {

        StartCoroutine("NewCube");

    }

    IEnumerator NewCube()

    {

        while (true)

        {

            Instantiate(cube);

            yield return new WaitForSeconds(3f);

        }

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值