组件的生命周期
代码语言: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绑定的脚本