44 lines
1.7 KiB
Markdown
44 lines
1.7 KiB
Markdown
|
|
[相机控制]
|
|||
|
|
今天学习的是MMO的15节课摄像机
|
|||
|
|
通过多层结构控制摄像机的移动缩放,并且适配安卓平台的手指旋转缩放
|
|||
|
|
### 第三人称相机控制
|
|||
|
|
在新版本基本上是使用cinemamachine来控制相机的移动,在15年的时候并没有这个插件,因此教程使用多层结构来手搓了一个第三人称相机控制器
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### Transform的一些知识
|
|||
|
|
|
|||
|
|
当你在一个 `Transform` 对象上使用 `foreach` 循环时,你实际上是在遍历它在场景层级 (Hierarchy) 中的所有**子对象 (child objects)**。
|
|||
|
|
|
|||
|
|
可以把 `pellets` 这个 `Transform` 想象成一个父容器,它下面可以挂载很多子物体。`foreach` 循环会逐一访问它的每一个子物体。
|
|||
|
|
|
|||
|
|
**在你的代码中:**
|
|||
|
|
|
|||
|
|
C#
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
public Transform pellets; // 你会在Inspector中把一个父物体(比如一个空对象)拖到这里,这个父物体下包含了所有的豆子。
|
|||
|
|
|
|||
|
|
// ...
|
|||
|
|
|
|||
|
|
public void NewRound()
|
|||
|
|
{
|
|||
|
|
// 这个循环会遍历 'pellets' 这个Transform下的每一个子物体的Transform组件
|
|||
|
|
foreach (Transform pellet in pellets)
|
|||
|
|
{
|
|||
|
|
// 'pellet' 在每次循环中,都是一个子物体的 Transform
|
|||
|
|
// 比如,你可以在这里重新激活每一个豆子
|
|||
|
|
pellet.gameObject.SetActive(true);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**总结一下:**
|
|||
|
|
|
|||
|
|
- **不是数组**:`pellets` 是单个 `Transform` 组件。
|
|||
|
|
- **可以遍历**:因为它被设计成可以像集合一样,让你能方便地访问其所有的子物体。
|
|||
|
|
- **遍历内容**:循环遍历的是它所有子物体的 `Transform`。
|
|||
|
|
|
|||
|
|
这是一个非常有用的 Unity 设计,可以让你很方便地管理一组相关的游戏对象(比如所有的敌人、所有的金币、或者你代码里所有的豆子)。
|