unity基础 常用的API

目录

GameObject

Transform

Vector

Quaternion

Input

Physics / Physics2D

Rigidbody / Rigidbody2D

Time

Camera

Animator


对于刚学unity的新手,c#脚本基础尤为重要,一文带你搞定一些简单实用的小脚本,让你轻松入门。

GameObject

GameObject 是 Unity 中的核心类,代表场景中的一个对象。

  • GameObject.Find(string name):根据名称查找对象。
  • GameObject.CreatePrimitive(PrimitiveType type):创建一个带有基本碰撞体的对象(如 Cube、Sphere)。
  • GameObject.SetActive(bool isActive):设置对象的激活状态。
  • GameObject.AddComponent<T>():为对象添加组件。
  • GameObject.GetComponent<T>():获取对象上的指定组件。
  • GameObject.GetComponents<T>():获取对象上的所有指定组件。
  • GameObject.GetComponentInChildren<T>():获取对象子级中的指定组件。
  • GameObject.GetComponentInParent<T>():获取对象父级中的指定组件。
  • GameObject.FindWithTag(string tag):根据标签查找对象。
  • GameObject.CompareTag(string tag):检查对象是否带有指定标签。

Transform

Transform 是 Unity 中用于控制对象位置、旋转和缩放的组件。

  • Transform.position:获取或设置对象的世界坐标位置。
  • Transform.localPosition:获取或设置对象相对于父级的位置。
  • Transform.rotation:获取或设置对象的世界旋转(四元数)。
  • Transform.localRotation:获取或设置对象相对于父级的旋转。
  • Transform.eulerAngles:获取或设置对象的欧拉角旋转。
  • Transform.localScale:获取或设置对象的缩放比例。
  • Transform.Translate(Vector3 translation):按指定方向移动对象。
  • Transform.Rotate(Vector3 eulerAngles):按指定欧拉角旋转对象。
  • Transform.LookAt(Transform target):让对象面向目标位置。
  • Transform.parent:获取或设置对象的父级。
  • Transform.SetParent(Transform parent):设置对象的父级。
  • Transform.GetChild(int index):获取指定索引的子对象。
  • Transform.childCount:获取子对象的数量。
  • Transform.Find(string name):根据名称查找子对象。

Vector

Vector 是 Unity 中用于表示向量和点的结构体。常见的向量类型包括 Vector2Vector3

  • Vector3.zero:表示零向量 (0, 0, 0)。
  • Vector3.one:表示单位向量 (1, 1, 1)。
  • Vector3.up:表示世界坐标系中的“上”方向。值为 Vector3(0, 1, 0)

  • Vector3.down:表示世界坐标系中的“下”方向。值为 Vector3(0, -1, 0)

  • Vector3.right:表示世界坐标系中的“右”方向。值为 Vector3(1, 0, 0)

  • Vector3.left:表示世界坐标系中的“左”方向。值为 Vector3(-1, 0, 0)

  • Vector3.forward:表示世界坐标系中的“前”方向。值为 Vector3(0, 0, 1)

  • Vector3.back:表示世界坐标系中的“后”方向。值为 Vector3(0, 0, -1)

  • Vector3.Lerp(Vector3 a, Vector3 b, float t):在两个向量之间线性插值。
  • Vector3.Distance(Vector3 a, Vector3 b):计算两个向量之间的距离。
  • Vector3.Normalize():将向量归一化。
  • Vector3.Dot(Vector3 a, Vector3 b):计算两个向量的点积。
  • Vector3.Cross(Vector3 a, Vector3 b):计算两个向量的叉积。

Quaternion

Quaternion 是 Unity 中用于表示旋转的结构体,避免了欧拉角的万向节锁问题。

  • Quaternion.identity:表示无旋转。
  • Quaternion.Euler(Vector3 eulerAngles):将欧拉角转换为四元数。

Input

Input 类用于处理玩家的输入(如键盘、鼠标、触摸、控制器等)。

  • Input.GetKey(KeyCode key):当指定键按住时返回 true
  • Input.GetMouseButtonDown(int button):当指定鼠标按钮按下时返回 true
  • Input.mousePosition:获取当前鼠标的位置(屏幕坐标)。
  • Input.GetAxis("Horizontal"):获取水平轴的输入值。
  • Input.GetAxis("Vertical"):获取垂直轴的输入值。
  • Input.touchCount:获取当前触摸点的数量。
  • Input.GetTouch(int index):获取指定索引的触摸点信息。

Physics / Physics2D

PhysicsPhysics2D 类用于处理物理相关的功能(如碰撞检测、射线检测等)。

  • Physics.Raycast(Ray ray, out RaycastHit hit):检测射线是否与碰撞体相交。
  • Physics2D.Raycast(Vector2 origin, Vector2 direction):2D 射线检测。
  • Physics2D.OverlapCircle(Vector2 point, float radius):检测圆形范围内的碰撞体。
  • Physics.SphereCast(Vector3 origin, float radius, Vector3 direction):球形射线检测。 

Rigidbody / Rigidbody2D

RigidbodyRigidbody2D 用于在 Unity 中实现物理效果。

  • Rigidbody.velocity:获取或设置刚体的速度。
  • Rigidbody.angularVelocity:获取或设置刚体的角速度。
  • Rigidbody.AddForce(Vector3 force):对刚体施加力。
  • Rigidbody.AddTorque(Vector3 torque):对刚体施加扭矩。
  • Rigidbody2D.AddTorque(float torque):对 2D 刚体施加扭矩。

Time

Time 类用于处理与时间相关的功能(如帧时间、时间缩放等)。

  • Time.deltaTime:获取上一帧到当前帧的时间(秒)。
  • Time.time:获取游戏开始到当前的总时间(秒)。
  • Time.timeScale:控制游戏时间的缩放比例(如暂停游戏)。

Camera

Camera 类用于控制摄像机的功能。

  • Camera.main:获取主摄像机(通过 MainCamera 标签)。
  • Camera.ScreenPointToRay(Vector3 screenPosition):从摄像机发出一条射线,指向屏幕上的指定位置。
  • Camera.WorldToScreenPoint(Vector3 worldPosition):将世界坐标转换为屏幕坐标。
  • Camera.ViewportToScreenPoint(Vector3 viewportPosition):将视口坐标转换为屏幕坐标。
  • Camera.fieldOfView:获取或设置摄像机的视野角度。
  • Camera.orthographic:获取或设置摄像机是否为正交投影。
  • Camera.backgroundColor:获取或设置摄像机的背景颜色。

Animator

Unity 的动画系统用于控制对象的动画播放。

  • Animator.SetTrigger(string triggerName):设置触发器,触发动画状态。
  • Animator.SetBool(string parameterName, bool value):设置布尔参数。
  • Animator.SetFloat(string parameterName, float value):设置浮点参数。
  • Animator.SetInteger(string parameterName, int value):设置整数参数。
  • Animator.Play(string stateName):播放指定动画状态。

<think>首先,用户的问题是:“我想查找Unity常用API 请问Unity常用API”。用户正在寻求关于Unity常用API的信息。 从系统指令中,我应该参考用户提供的站内引用。这些引用是关于Unity API的,所以我需要将它们整合到我的回答中。 列出关键引用: - 引用[1]:强调掌握常用API是必备技能,但需要不断学习。API在演进,要保持好奇心,深入理解原理和应用。 - 引用[2]:提到C#提供了操作,Unity中有些API在webplayer中不支持,但mobile支持。参考兼容性列表。 - 引用[3]:讨论Unity常用API与类,包括协程的使用、性能影响、生命周期管理、错误处理等。还提到协程是在主线程上运行。 - 引用[4]:具体例子,如FindObjectsOfType()用于查找所有指定类型的对象,并给出了代码示例。 用户的问题焦点是“Unity常用API”,所以我应该提供一个清晰的、结构化的回答,列出常用API。 回想一下Unity中的常用API类别: - **GameObject类**:用于创建、销毁、查找游戏对象。 - **Transform类**:用于处理位置、旋转、缩放。 - **Component类**:基类,用于附加组件。 - **Time类**:用于时间相关操作,如deltaTime。 - **Input类**:处理用户输入。 - **Physics类**:用于物理计算。 - **Coroutines**:用于异步操作。 从引用中,我应该整合信息: - 引用[3]提到协程的使用、性能考虑。 - 引用[4]提供了FindObjectsOfType()的例子。 回答结构: - **开头**:介绍Unity常用API的重要性,参考引用[1]。 - **主体**:列出常用API类别,并给出简要描述和例子。使用中文,因为系统指令要求中文回答。 - **结尾**:鼓励学习和实践,参考引用[1]。 - **相关问题**:根据系统指令,生成相关问题。 系统指令要求生成相关问题,并在回答中引用的段落末尾添加引用标识。 所以,在回答中,当我引用某个部分时,在末尾加[^n]。 例如: UnityAPI包括GameObject类和Transform类等[^1]。 然后,在相关问题部分,列出几个问题。 常见Unity API类别: 1. **GameObject类**:管理游戏对象的基本操作,如创建、销毁、查找。 - 例如:GameObject.Find(), Instantiate(), Destroy() 2. **Transform类**:处理对象的变换。 - 例如:position, rotation, scale, Translate(), Rotate() 3. **Component类**:所有组件的基类。 - 例如:GetComponent<>(), AddComponent<>() 4. **Time类**:时间管理。 - 例如:Time.deltaTime, Time.timeScale 5. **Input类**:输入处理。 - 例如:Input.GetKey(), Input.GetAxis() 6. **Physics类**:物理引擎相关。 - 例如:Physics.Raycast(), Rigidbody.AddForce() 7. **Coroutines**:协程。 - 例如:StartCoroutine(), IEnumerator 从引用[4]中,有FindObjectsOfType()的例子,我可以包括。 从引用[3]中,有协程的注意事项。 回答结构: - 引言:简述Unity常用API的重要性。 - 常用API列表:用清晰的标题列出每个类别,描述和例子。 - 注意事项:提到性能、兼容性等(参考引用[2]和[3])。 - 结尾:鼓励深入学习。 - 相关问题:生成3-5个相关问题。 数学表达式:用户的问题没有涉及数学,但系统指令说所有行内数学表达式必须用$...$,独立公式用$$...$$。这里可能不需要数学,除非有必要时。Unity API不涉及太多数学,所以可能跳过。 使用中文回答。 最终回答大纲: 1. **介绍**:Unity常用API是开发游戏的核心工具,掌握它们能提高开发效率[^1]。 2. **常用API类别**: - **GameObject类**:用于游戏对象的创建和管理。例子:`GameObject.CreatePrimitive()`, `GameObject.Destroy()`[^4]。 - **Transform类**:控制对象的变换属性。例子:`transform.position = new Vector3(0, 0, 0);`[^4]。 - **Component类**:组件的基类,支持获取和添加组件。例子:`GetComponent<Renderer>()`[^4]。 - **Time类**:管理游戏时间。例子:使用Time.deltaTime实现平滑移动[^4]。 - **Input类**:处理用户输入。例子:`if (Input.GetKeyDown(KeyCode.Space)) { ... }`。 - **协程(Coroutines)**:用于异步操作。例子:`StartCoroutine(MyCoroutine())`;需要注意性能影响和错误处理[^3]。 - 其他:如Physics.Raycast()用于射线检测。 3. **注意事项**:Unity API在不同平台兼容性不同,如WebPlayer可能不支持某些API[^2]。协程不是线程安全的,需在主线程使用[^3]。 4. **结论**:持续学习新API是必要的,结合实际项目实践[^1]。 5. **相关问题**: - 1. 如何优化Unity协程的性能? - 2. Unity中如何处理跨平台API兼容性问题? - 3. 常用API游戏开发中的具体应用场景是什么? 确保回答真实可靠。 </think>### Unity常用API介绍 Unity作为流行的游戏开发引擎,其API(Application Programming Interface)提供了丰富的功能,帮助开发者高效创建游戏逻辑。掌握常用APIUnity开发的基础技能,但随着技术演进,API也在不断更新,开发者需要持续学习和实践[^1]。以下我将参考站内引用,系统梳理Unity常用API类别、关键方法和注意事项。Unity API主要基于C#语言实现,许多操作已直接集成在C#中,简化了开发[^2]。 #### 1. **GameObject类** GameObject类用于管理游戏中的对象,包括创建、销毁和查找操作。它是Unity场景中的基本实体,任何物体(如角色、道具)都是GameObject实例。 - **常用方法**: - `GameObject.Find(string name)`: 根据名称查找场景中的GameObject。例如,在角色控制中查找敌人对象。 - `Instantiate(GameObject original)`: 克隆一个GameObject副本,常用于生成敌人或道具。 - `Destroy(GameObject obj)`: 销毁指定GameObject,释放资源。 - `SetActive(bool value)`: 激活或禁用对象,控制其可见性和交互。 - **代码示例**(参考引用[4]): ```csharp // 查找并禁用所有灯光对象 Light[] lights = GameObject.FindObjectsOfType<Light>(); foreach (Light light in lights) { light.gameObject.SetActive(false); } ``` 注意事项:`FindObjectsOfType<T>()` 可以查找所有指定类型对象(如灯光),并支持包含非激活对象(传递 `true` 参数)[^4]。 #### 2. **Transform类** Transform类处理游戏对象的变换属性(位置、旋转、缩放),是组件的基础。每个GameObject都附带一个Transform组件。 - **常用属性和方法**: - `position`, `rotation`, `localScale`: 直接访问或修改对象的坐标、旋转和缩放。 - `Translate(Vector3 direction)`: 移动对象,适用于角色移动或动画。 - `Rotate(Vector3 eulerAngles)`: 旋转对象,常用于摄像机控制。 - `LookAt(Transform target)`: 使对象朝向目标,用于AI或摄像机跟随。 - **代码示例**: ```csharp // 使玩家角色向前移动 void Update() { transform.Translate(Vector3.forward * Time.deltaTime * speed); } ``` 关键点:Transform操作通常与Time类结合,实现平滑运动(如Time.deltaTime确保帧率无关的移动)[^4]。 #### 3. **Component类** Component是所有Unity组件(如脚本、碰撞器)的基类,用于添加或获取功能。 - **常用方法**: - `GetComponent<T>()`: 获取GameObject上附加的指定类型组件(例如脚本或渲染器),用于数据交互。 - `AddComponent<T>()`: 动态添加新组件,运行时扩展对象功能。 - `CompareTag(string tag)`: 检查对象标签,常用于碰撞检测。 - **代码示例**: ```csharp // 获取玩家身上的渲染器组件并修改颜色 Renderer renderer = GetComponent<Renderer>(); if (renderer != null) { renderer.material.color = Color.red; } ``` 注意事项:组件操作需确保对象激活状态,否则可能返回null[^4]。 #### 4. **Time类** Time类管理游戏时间,实现时间相关逻辑(如动画、物理)。 - **常用属性**: - `Time.deltaTime`: 上一帧的持续时间(秒),用于平滑移动计算(避免帧率依赖)。 - `Time.timeScale`: 控制游戏时间流速(1为正常,0为暂停),实现慢动作或暂停效果。 - `Time.time`: 游戏启动后的总时间(秒),用于计时器或事件触发。 - **应用场景**:在Update方法中,使用Time.deltaTime确保角色移动速度一致[^4]。 #### 5. **协程(Coroutines)** 协程是Unity的异步机制,用于实现延时、序列操作或加载资源。它不是多线程,而是在主线程逐帧执行,简化复杂异步逻辑[^3]。 - **常用方法**: - `StartCoroutine(IEnumerator routine)`: 启动协程。 - `StopCoroutine(Coroutine routine)`: 停止指定协程。 - `yield return new WaitForSeconds(float time)`: 延时执行。 - **代码示例**: ```csharp // 协程示例:延时后触发事件 IEnumerator DelayedAction() { Debug.Log("Start waiting..."); yield return new WaitForSeconds(2f); // 等待2秒 Debug.Log("Action executed!"); } void Start() { StartCoroutine(DelayedAction()); } ``` 注意事项:协程需注意性能影响(避免频繁创建),生命周期管理(对象销毁时自动停止),和错误处理(使用try-catch避免异常终止)[^3]。 #### 6. **其他核心API** - **Input类**:处理用户输入(键盘、鼠标、触摸)。例如,`Input.GetKey(KeyCode.Space)`检测空格键按下。 - **Physics类**:物理引擎相关,如`Physics.Raycast()`用于射线检测(碰撞或距离计算)。 - **Object类**:Unity对象的基类,提供`Destroy()`或`Instantiate()`等通用方法[^4]。 #### 注意事项和最佳实践 - **兼容性**:某些API(如文件操作)在WebPlayer中可能不支持,需参考Unity兼容性列表;Mobile平台通常支持[^2]。 - **性能优化**:频繁API调用(如协程或查找操作)可能影响性能。建议缓存结果(例如,在Start中存储组件引用),并合并任务[^3]。 - **学习建议**:Unity API不断演进,结合官方文档和实际项目实践是关键。初学者可从简单场景入手(如角色控制器),逐步探索高级功能[^1]。 持续学习和实验是掌握Unity API的核心——保持好奇心,深入理解原理,你将创造出更优秀的游戏作品[^1]。如需进一步资源,Unity官方API文档是权威参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值