c#Unity基础方法归纳(2)

 ̄綄美尐妖づ 提交于 2020-03-06 08:59:05

携程的调用

void Start()
    {
        print("task1");
        print("task2");
        //print("task3");
        StartCoroutine("Task3");//开启携程方法
        print("task4");
    }
    void Update()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            StopCoroutine("Task3");
        }
    }
    IEnumerator Task3()
    {
        yield return new WaitForSeconds(2f);//停顿2s
        print("task3");
    }

刚体的移动

  //让Cylinder移动的四种方法
    //第一种方法:改变Position位置信息,让他在一个方向有持续增量
    //transform.position += new Vector3(Time.deltaTime * 2f, 0, 0);

    //第二种方法:通过transform.Translate方法
    // transform.Translate(Vector3.right * Time.deltaTime * 2f, Space.Self);//默认是self坐标方向

    //第三种方法:Vector3.Lerp方法,非匀速,先快后慢
    Vector3 target = new Vector3(4f, 0, -4f);
    // transform.position = Vector3.Lerp(transform.position, target, Time.deltaTime);

    //第四种方法:Vector3.MoveTowards方法,匀速
    //transform.position = Vector3.MoveTowards(transform.position, target, Time.deltaTime);

    //虚拟轴控制移动wasd
    float h = Input.GetAxis("Horizontal");
    float v = Input.GetAxis("Vertical");
    transform.Translate(Vector3.right * h * Time.deltaTime);
    transform.Translate(Vector3.forward * v * Time.deltaTime);

传参对象位移

private Rigidbody r;
    // Start is called before the first frame update
    void Start()
    {
        r = gameObject.GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        //刚体的移动
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        r.MovePosition(r.position+transform.right * h * Time.deltaTime * 2f);

        r.MovePosition(r.position + transform.forward * v * Time.deltaTime * 2f);
    }

碰撞事件

collision是碰撞参数的集合体,里面有你所需要的各种碰撞信息

	//碰撞事件检测
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.name!="Plane")
        {
            print("Enter: " + collision.gameObject.name);
        }
    }
    private void OnCollisionExit(Collision collision)
    {
        if (collision.gameObject.name!="Plane")
        {
            print("Exit:" + collision.gameObject.name);
        }
    }
    private void OnCollisionStay(Collision collision)
    {
        if (collision.gameObject.name!="Plane")
        {
            print("Stay: " + collision.gameObject.name);
        }
    }

触发器Trigger

碰撞之后就是触发器了,box collider 里面勾选is trigger,碰撞器变成了触发器。
碰撞触发三条件:

	//trigger事件,运动的物体必须带有collider和rigidbody
    //另一个物体必须至少有collider
    //其中一个勾选IsTrigger
    private void OnTriggerEnter(Collider other)
    {
        print("triggerEnter: " + other.gameObject.name);
    }
    private void OnTriggerExit(Collider other)
    {
        print("triggerExit: " + other.gameObject.name);
    }
    private void OnTriggerStay(Collider other)
    {
        print("triggerStay: " + other.gameObject.name);
    }
}

预制体的销毁(寿命

在创建预制体的时候经常会需要添加一个寿命,即自动销毁destroy()。
可以在prefabs(自创的预制体文件夹)里找的预制体,open prefab查看
也可以在对象的>直接切过去看

void Start()
    {
        Destroy(gameObject, 0.2f);//活不过2s
    }

物理射线的使用

同样的是触发机制。

// Start is called before the first frame update
private Ray ray;
private RaycastHit hit;
public GameObject obj;
// Update is called once per frame
//创建一条射线
//检测射线与其他物体的碰撞,得到碰撞信息
//通过碰撞信息对物体进行处理
void Update()
{
    //鼠标左键按下发射射线
    if (Input.GetMouseButtonDown(0))
    {
        //使用主摄像机创建一条射线,射线方向是到鼠标点击位置
        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        //使用物理类中的射线检测方法
    if (Physics.Raycast(ray,out hit))
    {
        Instantiate(obj, hit.collider.transform.position, hit.collider.transform.rotation);
        //将碰撞到的物体销毁
        GameObject.Destroy(hit.collider.gameObject);
    }
    }
}

以上是我菜(逃)学unity的代码笔记

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!