以匀速旋转一个立方体对象为例,展示具体
旋转
编码操作
- 话不多说,上代码,超简单必懂!不懂可以留言喔 ~
Unity 通过 C# 脚本旋转游戏物体
- 新建脚本文件
xxx.cs
:Project 窗口右键 - Creat - C# Scripts - 右键创建好的 C# 文件 - Rename
- 双击 C# 文件在 VS 中打开,初始内容如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class xxx : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } }
- 修改代码,保存(保存之后会自动编译,不用手动管)
// 匀速转动核心代码 float speed = 30.0f; this.transform.Rotate(0, speed*Time.deltaTime, 0);
//匀速转动完整代码 using System.Collections; using System.Collections.Generic; using UnityEngine; public class xxx : MonoBehaviour // 类名与文件名一致,需要修改的话:右键类名 - 重命名 - 即可同步修改 { // Start is called before the first frame update void Start() { // Debug.Log("** xxx ... "); // 运行后,会在控制台窗口显示 GameObject obj = this.gameObject; // 获取当前所挂载的游戏物体 // Debug.Log("** NAME: " + obj.name); // 打印游戏物体名称 // #### 场景 1. 游戏开始前使得物体面向给定目标,如面向游戏物体 "flag_xxx" GameObject flag = GameObject.Find("flag_xxx"); this.transform.LookAt(flag.transform); // 使得当前游戏物体 obj 的z轴指向目标物体 flag // #### 场景 2. 游戏开始前使得物体旋转给定角度,如 (0, 45, 0) // this.transform.rotation = ... // .rotation 需要指定四元组,不方便操作,所以我们使用如下: this.transform.eulerAngles = new Vector3(0, 45, 0) } // Update is called once per frame (每帧都更新,帧率不固定) void Update() { Debug.Log("Time delta" + Time.deltaTime); // 打印两帧时间间隔 // #### 场景 3. 非严格匀速转动:每帧转动固定角度,如 0.5f // Vector3 angles= this.transform.localEulerAngles; // angles.y += 0.5f; // this.transform.localEulerAngles= angles; // #### 场景 4 【更新 localEulerAngles写法】. 严格匀速转动,速度设定为 speed // Vector3 angles= this.transform.localEulerAngles; // float speed = 30.0f; // angles.y += speed*Time.deltaTime; // this.transform.localEulerAngles= angles; // #### 场景 4 【简单写法:利用角度增量更新】. 严格匀速转动,速度设定为 speed float speed = 30.0f; this.transform.Rotate(0, speed*Time.deltaTime, 0); // 默认为 space.Self -- 物体自身坐标系 // this.transform.Rotate(0, speed*Time.deltaTime, 0, Space.World); // Global -- 世界坐标系 // #### 场景5. 公转:围绕另一个物体旋转 //在层级窗口构建父子关系,父物体转动时,子物体即会随着父物体转动 // this.transform.parent.Rotate(0, speed*Time.deltaTime, 0); // 获取父物体对应的 unity 手册:https://docs.unity3d.com/cn/2020.3/ScriptReference/Transform-parent.html } }
- 挂载:直接拖动到目标物体的 Inspector 窗口中
- 运行:运行游戏,脚本会自动被加载、运行
欢迎关注 、订阅专栏 【unity 新手教程】谢谢你的支持!💜💜
- Unity 使用 C# 进行开发,不熟悉的友友 👉 C#官方文档指路
- Unity 官方手册指路