当前位置: 首页 > news >正文

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);}
}

代码解释

  1. deltaTime:用于存储每帧时间的变量,Time.unscaledDeltaTime 返回每帧的时间间隔(以秒为单位),不受 Time.timeScale 的影响
  2. Update 方法:在每一帧中,可更新 deltaTime 的值,通过使用一个平滑因子(0.1f),可使帧率的计算更加平滑
  3. OnGUI 方法:用于在屏幕上绘制 GUI 元素的方法,可计算帧率并将其显示在屏幕的左上角
  4. 帧率计算:float fps = 1.0f / deltaTime; 通过计算 deltaTime 的倒数来获取当前帧率
  5. GUI 显示:使用 GUI.Label 方法在屏幕上显示帧率,GUIStyle 用于设置文本的字体大小和颜色

http://www.mrgr.cn/news/69690.html

相关文章:

  • #Swift Automatic Initializer Inheritance
  • Area-Composition模型部署指南
  • 创新培养:汽车零部件图像分割
  • RSTP的配置
  • 【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数
  • 2023年MathorCup数学建模B题城市轨道交通列车时刻表优化问题解题全过程文档加程序
  • Java中的享元模式
  • PostgreSQL pg-xact(clog)目录文件缺失处理
  • C++11 --可变参数模版
  • 【新书】掌握大语言模型:高级技术、应用、尖端方法和顶尖LLMs
  • 模型 长尾效应
  • 词嵌入方法(Word Embedding)
  • 月薪已炒到15w?强烈建议大家冲一冲设计新兴领域,工资高前景好,人才缺口极大!
  • 每个人都要懂的生活哲学养身哲学
  • 【设计模式】结构型模式(四):组合模式、享元模式
  • 在 Windows 安装 QT6.8 并用图形拉取界面 时间2024/11/10
  • 鸿蒙系统:智能生态的新纪元与开发者的新机遇
  • 牧神记开分9.7,2024新国漫巅峰出现了
  • 机器学习Housing数据集
  • 使用layui过程中的问题
  • mapreduce综合应用案例 — 气象数据清洗
  • 基于SpringBoot和Vue的公司文档管理系统设计与开发(源码+定制+开发)
  • LVGL UI设计神器助你高效开发嵌入式UI应用——v0.18.0发布(中)
  • SMOTE算法深度解析及代码实现
  • 「QT」几何数据类 之 QLine 整型直线类
  • UVC 输出视频格式修改和windows下数据分析