【Unity】随心记

2023-03-11 10:49:38 浏览数 (2)

组件的生命周期

代码语言:javascript复制
//使用 Awake 来代替构造函数进行初始化,因为组件的序列化状态在构造时是未定义的。
//与构造函数一样,仅调用 Awake 一次。
//调用时间:最早调用,所以一般可以在此实现单例模式
void Awake(){}

//调用时间:组件激活后调用,在Awake后调用一次
OnEnable(){}

//初始化函数,在所有Awake函数运行完之后(一般是这样,但不一定)在所有Update函数前系统自动条用。
//一般用来给变量赋值。
//调用时间:在UpDate之前调用一次,在OnEnable之后调用,可以在此设置一些初始值
void Start(){}

//固定帧率调用方法,每次调用与上次调用的时间间隔相同
void FixedUpdate(){}

//调用时间:帧率调用方法,每一帧调用一次,每次调用与上次调用的时间间隔不相同
void Update(){}

//调用时间:在Update每调用完一次后,紧跟着调用一次
void LateUpdate(){}

//调用时间:在OnEnable相反,组件未激活时调用
void OnDisable(){}

//调用时间:被销毁后调用一次
void OnDestroy(){}

角色控制

基础移动与转向

代码语言:javascript复制
    public float moveSpeed;//移动速度

    private Rigidbody2D rb;//2D刚体对象
    private bool facingRight = true;//转向判断条件
    private float moveDirection;//按键事件 返回1 , -1

    //初始化
    private void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    //帧事件
    void Update()
    {

        //获取按键
        ProcessInputs();

        //转向判断
        Animate();

        //水平移动
        Move();

    }


    private void Move()
    {
        rb.velocity = new Vector2(moveDirection * moveSpeed, rb.velocity.y);
    }
    private void Animate()
    {
        if (moveDirection > 0 && !facingRight)
        {
            //转向
            FilpCharacter();
        }
        else if (moveDirection < 0 && facingRight)
        {
            FilpCharacter();
        }
    }
    private void ProcessInputs()
    {
        moveDirection = Input.GetAxis("Horizontal");
    }
    private void FilpCharacter()
    {
        facingRight = !facingRight;
        transform.Rotate(0f, 180f, 0f);
    }

碰撞监听

需先给碰撞对象添加 Collider 碰撞器组件

代码语言:javascript复制
//监听发生碰撞
private void OnCollisionEnter(){}

//简体持续碰撞
private void OnCollisionStay(){}

//结束碰撞
private void OnConllisionExit(Collision collision){}

GetComponent<T>

得到单独一个对象或属性

可用于获取:模型对象,对象的属性,对象悬挂脚本

代码语言:javascript复制
//获取模型对象
脚本名(ScriptName) 接收对象(Model) = GetComponent<脚本名(ScriptName)>();
//通过模型绑定的脚本来获取模型对象, 注意:如果多个模型上绑定同一个脚本,只会获取到最后绑定脚本的模型对象

//获取对象的属性
GameObject NewGame;//创建一个对象并为对象赋值
Button button= NewGame.GetComponent<Button>();//得到NewGame绑定的button属性

//对象悬挂脚本
GameObject NewGame;//创建一个对象并为对象赋值
脚本名(ScriptName) 接收对象(Model) = NewGame.GetComponent<脚本名(ScriptName)>();//得到NewGame绑定的脚本

0 人点赞