Unity小小笔记

135 阅读3分钟

Unity


[toc]

脚本

  1. GetComponent和GetComponentInChildren的区别
rb = GetComponent<Rigidbody2D>();
anim = GetComponentInChildren<Animator>();

GetComponent

  • 作用范围:只在调用该方法的游戏对象上查找组件。
  • 性能:通常比 GetComponentInChildren 更快,因为它只查询单个游戏对象。
  • 使用场景:当你确定组件直接附加在当前游戏对象上,并且不需要考虑子对象时。

GetComponentInChildren

  • 作用范围:在调用该方法的游戏对象及其所有子对象上查找组件。
  • 性能:==可能比 GetComponent慢==,特别是当游戏对象有很多子对象时,因为它需要递归地查询所有子对象。
  • 使用场景:当你需要获取当前游戏对象或其任何子对象上的组件时。
  1. Physics2D.Raycast
isGround = Physics2D.Raycast(transform.position, Vector2.down, groundCheckDistance, whatIsGround);

Physics2D.Raycast 是 Unity 物理系统中的一个方法,用于在 2D 空间中发射一条射线(一条直线)并检测与碰撞器的碰撞。这个方法特别适用于创建各种交互效果,比如检测鼠标点击游戏对象、实现基于射线的玩家控制,或模拟 AI 角色的视线。

  • origin:射线的起点在 2D 空间中的坐标。
  • direction:射线的方向(一个向量)。
  • distance:射线最远可以到达的距离。
  • layerMask:一个 LayerMask,指定哪些层会被考虑用于碰撞检测。
  1. .f是什么意思

在Unity中,.f 是浮点数格式的表示方法之一,用于==指定一个浮点数的小数点后保留几位数字==。具体来说,.3f 意味着保留小数点后三位。

float number = 3.1415926f;
Debug.Log(number.ToString("0.000")); // 输出: 3.142
  1. deltaTime

deltaTime 是 Unity 中一个非常重要的属性,用于表示自上一帧到当前帧所经过的时间,单位是秒。它通常用于确保游戏逻辑和动画与帧率无关,从而==使游戏在不同的硬件和帧率下表现一致==。

  • 移动物体
void Update() 
{
    float speed = 5.0f;
    transform.Translate(Vector3.forward * speed * Time.deltaTime);
}

物体会以每秒5个单位的速度向前移动。无论帧率如何变化,物体的移动速度都会保持一致。

  • 旋转物体
void Update() 
{
    float rotationSpeed = 90.0f;
    transform.Rotate(Vector3.up, rotationSpeed * Time.deltaTime);
}

物体会以每秒90度的速度绕Y轴旋转。 ==deltaTime 可以通过 Time.deltaTime 来访问==。

  1. protected和virtual
  • 当一个成员同时被声明为protected和virtual时,它的作用是==允许派生类访问和重写该成员==。

  • 这种组合常见于基类中定义的方法或属性,目的是为派生类提供一个可以自定义的默认实现。

  • 派生类可以通过override关键字来重写基类中的protected virtual成员,以提供自己的实现逻辑。

  • 同时,protected的访问限制确保了这些成员只能在继承层次结构内部被访问和修改,而不会被外部代码直接访问。

窗口

常见问题

  1. Unity2d角色发生倒转

冻结角色的 Z 轴可以防止角色在 Z 轴上移动、简化物理计算、避免视觉错误、确保角色翻转的一致性,从而提高游戏的性能和稳定性。

  • Rigidbody2D 组件: 在 Rigidbody2D 组件的 Constraints 属性中,勾选 Freeze Position Z 选项。
  • Transform 组件: 在 Transform 组件的 Inspector 面板中,将 Position Z 的值设置为 0,并锁定该值。
  1. 为什么Unity2d翻转要设置成y轴翻转
  facingDir=facingDir*-1;
  facingRight=!facingRight;
  transform.Rotate(0, 180, 0);

这行代码==围绕 y 轴(Unity 世界空间中的上下轴)旋转游戏对象的变换==(transform)180 度。这是实际的视觉翻转,使得角色看起来面向相反的方向。在2D游戏中,这通常与设计对称的精灵一起使用,这样围绕 y 轴翻转180度会让它们看起来面向另一边。==x,y轴不能完成翻转==