unity下添加c#脚本
unity下添加c#脚本
- 创建脚本文件的方式
- 1. 创建脚本
- 2. 附加脚本到游戏对象
- 脚本常用的生命周期方法
- 1. Awake
- 2. Start
- 3. Update
- 4. FixedUpdate
- 5. LateUpdate
- 使用脚本控制游戏对象
- 1. 访问游戏对象的组件
- 2. 访问其他游戏对象
- 3. 变换组件
- 完整示例(创建一个简单的移动脚本)
- 计算每s帧率的代码
- 示例
- 代码解释
创建脚本文件的方式
在unity中,C#脚本是通过将脚本组件附加到游戏对象(gameobject)上实现的,脚本组件可以用来处理游戏对象的行为和逻辑
1. 创建脚本
-
右键点击项目窗口中的Assets,选择Create -> C# script
-
每个脚本必须继承自MonoBehaviour类,并且至少包含一个Update方法(或其他unity生命周期方法)
示例:
using UnityEngine;
public class MyScript : MonoBehaviour
{
//Start方法:初始化
void Start()
{
Debug.Log("脚本已初始化");
}
//Update方法:每帧调用
void Update()
{
//这里编写每帧执行的逻辑
Debug.Log("每帧执行的逻辑");
}
}
2. 附加脚本到游戏对象
- 在检视面板(Inspector)中,点击Add Component,在搜索框中输入脚本名称,选择脚本并添加到游戏对象上
脚本常用的生命周期方法
1. Awake
- 在脚本实例化时调用,无论脚本是否启用,在Start之前执行
- 常用于初始化对象之间的引用和设置
void Awake()
{
Debug.Log("脚本已实例化");
}
2. Start
- 在脚本首次启动用时调用一次,且在Update方法之前
- 常用于初始化依赖于Awake方法设置的逻辑
void Start()
{
Debug.Log("脚本已初始化");
}
3. Update
- 每帧调用,适用于非物理相关的逻辑
- 常用于输入检测、位置更新、动画控制等
void Update()
{
Debug.Log("每帧执行的逻辑");
}
4. FixedUpdate
- 以固定的时间步长调用,适用于物理相关的逻辑
- 常用于物理引擎交互、刚体控制等
void FixedUpdate()
{
Debug.Log("固定时间步长执行的逻辑");
}
5. LateUpdate
- 在Update方法之后调用,适用于需要再Update方法之后执行的逻辑
- 常用于摄像机跟随,动画后处理等
void LateUpdate()
{
Debug.Log("在Update 之后执行的逻辑");
}
使用脚本控制游戏对象
1. 访问游戏对象的组件
- 通过GetComponent方法获取游戏对象上的其他组件
//获取刚体组件
Rigidbody rb = GetComponent<Rigidbody>();
//应用力
rb.AddForce(Vector3.up * 10.0f);
2. 访问其他游戏对象
- 使用GameObject.Find方法或通过引用其他脚本中的公共变量来访问其他游戏对象
//通过名称查找游戏对象
GameObject target = GameObject.Find("TargetObject");
//通过标签查找游戏对象
GameObject player = GameObject.FindWithTag("Player");
3. 变换组件
- 使用transform组件来更改游戏对象的位置、旋转和缩放
//移动游戏对象
transform.Translate(Vector3.forward * Time.deltaTime * 5.0f);
//旋转游戏对象
transform.Rotate(Vector3.up, Time.deltaTime * 30.0f);
完整示例(创建一个简单的移动脚本)
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float speed = 5.0f;
void Update()
{
//获取水平输入
float moveHorizontal = Input.GetAxis("Horizontal");
//获取垂直输入
float moveHorizontal = Input.GetAxis("Vertical");
//创建移动向量
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
//应用移动
transform.Translate(movement * Time.deltaTime * speed);
}
}
计算每s帧率的代码
可通过Update方法计算并显示每秒频率(FPS),帧率是指每秒显示的帧数,可反映游戏运行的流畅度
示例
using UnityEngine;
public class FPSCounter : MonoBehaviour
{
private float deltaTime = 0.0f;
void Update()
{
//计算每一帧的时间
deltaTime += (Time.unscaledDeltaTime - deltaTime) * 0.1f;
}
void OnGUI()
{
//计算帧率
float fps = 1.0f / deltaTime;
//格式化显示频率
GUIStyle style = new GUIStyle();
style.fontSize = 36;
style.normal.textColor = Color.White;
//在屏幕左上角显示帧率
Rect rect = new Rect(10, 10, 100, 20);
GUI.Label(rect, $"FPS: {Mathf.Round(fps)}", style);
}
}
代码解释
- deltaTime:用于存储每帧时间的变量,Time.unscaledDeltaTime 返回每帧的时间间隔(以秒为单位),不受 Time.timeScale 的影响
- Update 方法:在每一帧中,可更新 deltaTime 的值,通过使用一个平滑因子(0.1f),可使帧率的计算更加平滑
- OnGUI 方法:用于在屏幕上绘制 GUI 元素的方法,可计算帧率并将其显示在屏幕的左上角
- 帧率计算:float fps = 1.0f / deltaTime; 通过计算 deltaTime 的倒数来获取当前帧率
- GUI 显示:使用 GUI.Label 方法在屏幕上显示帧率,GUIStyle 用于设置文本的字体大小和颜色