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

【Unity每日一记】Unity脚本基础指南

🧠 一、C#脚本基础

1.1 运算符分类

运算符类型运算符示例说明
算术运算符+ - * / %a + b加减乘除取余
比较运算符== != > < >= <=a > b比较大小关系
位运算符& | ~ ^ << >>a << 2按位操作
赋值运算符= += -= *= /=a += 5赋值与复合赋值
逻辑运算符&& || !a && b逻辑与或非
条件运算符?:a ? b : c三元条件表达式
🔍 位运算符详解
// 按位与:相同位都为1时结果为1
int result = a & b;
// 按位或:相同位有一个为1时结果为1
int result = a | b;
// 按位非:反转所有位
int result = ~a;
// 按位异或:相同位不同时结果为1
int result = a ^ b;
// 左移:所有位向左移动指定位数
int result = a << 2;
// 右移:所有位向右移动指定位数
int result = a >> 2;

1.2 命名规则

命名法规则示例适用场景
帕斯卡命名法每个单词首字母大写PlayerHealth类名、方法名、属性名
驼峰命名法首单词小写,后续单词首字母大写playerHealth变量名、参数名

🧩 二、选择结构与循环

2.1 选择结构

// 单分支结构
if (condition) {
// 条件为真时执行
}
// 双分支结构
if (condition) {
// 条件为真时执行
} else {
// 条件为假时执行
}
// if-else嵌套
if (condition1) {
// ...
} else if (condition2) {
// ...
} else {
// ...
}
// 多分支结构
switch (value) {
case 1:
// ...
break;
case 2:
// ...
break;
default:
// ...
break;
}

2.2 循环结构

// for循环
for (int i = 0; i < 10; i++) {
// 循环体
}
// while循环
while (condition) {
// 循环体
}
// do-while循环
do {
// 循环体
} while (condition);

⚙️ 三、Unity关键方法

3.1 生命周期方法

方法调用时机用途
Start()游戏开始时执行一次组件初始化、变量赋值
Update()每帧调用一次游戏逻辑更新、输入检测
FixedUpdate()固定时间间隔调用物理相关计算

3.2 Debug.Log()方法

// 输出简单信息
Debug.Log("Hello Unity!");
// 输出变量值
int health = 100;
Debug.Log("玩家生命值: " + health);
// 输出警告和错误
Debug.LogWarning("警告信息");
Debug.LogError("错误信息");

🔍 四、获取物体与组件

4.1 获取当前物体

// 输出当前挂载物体名称
Debug.Log(gameObject.name);
// 获取当前物体的Transform组件
Transform myTransform = transform;

4.2 获取组件

// 获取当前物体上的组件
Rigidbody rb = GetComponent<Rigidbody>();
Collider collider = GetComponent<Collider>();
// 获取子物体上的组件
Renderer childRenderer = GetComponentInChildren<Renderer>();

4.3 获取其他物体

// 通过名称查找(效率较低)
GameObject player = GameObject.Find("Player");
// 通过标签查找(推荐)
GameObject player = GameObject.FindGameObjectWithTag("Player");
// 查找多个同标签物体
GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
// 通过公开变量引用(最佳实践)
public GameObject targetObject; // 在Inspector中拖拽赋值

🚀 五、修改物体位置与旋转

5.1 修改物体位移

// 使用Translate方法移动
void Update() {
// 每秒向右移动1单位
transform.Translate(Vector3.right * Time.deltaTime);// 自定义速度移动
float speed = 5.0f;
transform.Translate(Vector3.forward * speed * Time.deltaTime);

5.2 修改物体旋转

// 使用Rotate方法旋转
void Update() {
// 每秒绕Y轴旋转30度
transform.Rotate(0, 30 * Time.deltaTime, 0);// 绕特定轴旋转
transform.Rotate(Vector3.up, 45 * Time.deltaTime);

5.3 直接指定位置和旋转

// 直接设置位置
transform.position = new Vector3(0, 1, 0);
// 直接设置旋转
transform.rotation = Quaternion.Euler(0, 90, 0);
// 平滑移动
transform.position = Vector3.Lerp(currentPos, targetPos, Time.deltaTime);

⏱️ 六、时间记录(Time类)

6.1 Time.deltaTime

void Update() {
// 获取上一帧到当前帧的时间间隔(秒)
float delta = Time.deltaTime;// 使用deltaTime实现帧率无关的移动
transform.Translate(Vector3.forward * speed * Time.deltaTime);

6.2 其他常用Time属性

Time.time // 游戏开始后经过的时间(秒)
Time.timeScale // 时间缩放比例(用于慢动作效果)
Time.fixedDeltaTime // FixedUpdate的时间间隔

🧪 七、综合示例

7.1 物体跟随脚本

public class FollowTarget : MonoBehaviour
{
public Transform target; // 跟随目标
public float followSpeed = 3.0f;
void Update()
{if (target != null){// 计算移动方向Vector3 direction = target.position - transform.position;// 使用deltaTime确保帧率无关transform.Translate(direction.normalized * followSpeed * Time.deltaTime);}
}
}

7.2 旋转物体示例

public class Rotator : MonoBehaviour
{
public float rotationSpeed = 90.0f; // 每秒旋转角度
void Update()
{// 绕Y轴旋转transform.Rotate(0, rotationSpeed * Time.deltaTime, 0);
}
}

💡 最佳实践总结

  1. 命名规范:使用帕斯卡命名法命名类和方法,驼峰命名法命名变量
  2. 组件获取:优先使用公开变量引用,其次使用标签查找
  3. 时间处理:所有移动和旋转操作都应乘以Time.deltaTime
  4. 调试技巧:合理使用Debug.Log()输出关键信息
  5. 性能优化:避免在Update中频繁调用Find方法

🚀 提示:在Unity编辑器中多实践这些脚本技巧,结合Inspector窗口调整参数观察效果!

http://www.dtcms.com/a/469304.html

相关文章:

  • Isaac Lab 2.3深度解析:全身控制与增强遥操作如何重塑机器人学习
  • 全美东莞网站建设福建省建设行业企业资质查询网站
  • SpringBoot集成springdoc
  • 【Java开发日记】请介绍类加载过程,什么是双亲委派模型?
  • 算法奇妙屋(五)-链表
  • 从iPhone转移到itel手机的联系人转移指南
  • MySQL实战篇04_Docker入门实战:从零搭建MySQL容器环境
  • 上海网站制作机构做网站后面维护要收钱吗
  • wget 命令速查手册 | HTTP / FTP 文件下载全指南
  • ffmpeg avio使用示例
  • 我把Excel变成了像素画板!用Python实现图片到单元格的映射
  • Android相册高频面试场景分析
  • 郑州建筑公司网站建设网页制作标准
  • iOS 推送证书 P8 介绍及生成流程
  • Ubuntu22.04安装Ibus的中文输入法
  • 基于STM32的智能物联网加湿器/智能家居
  • 23种设计模式——解释器模式(Interpreter Pattern)
  • 贴吧网站建设个人免费空间申请
  • 机器人能否实现远程视频通话方便家属探视老人
  • 小杰深度学习(ten)——视觉-经典神经网络——LetNet
  • LeetCode每日一题——困于环中的机器人
  • c++11 列表初始化 右值引用 移动语义 引用折叠 完美转发
  • 以太网与工业以太网通信C#开发
  • 14-verilog的SPI主驱动
  • vue项目安装chromedriver超时解决办法
  • 【C++】12.多态(超详解)
  • 【Linux操作系统】进程控制
  • 做实验流程图的网站广州免费核酸采集点时间
  • 网站网页设计公司电子商务公司logo
  • 潮玩盲盒抽赏小程序玩法拆解:不同视角下的增长逻辑分析