- debug方法
Debug.Log(" 一般日志 ");
Debug.LogWarning(" 警告日志 ");
Debug.LogError(" 错误日志 ");
// Player Information
string strPlayerName = "Peter";
int iPlayerHpValue = 32500;
short shPlayerLevel = 10;
long lAdvantureExp = 114514;
Debug.Log("Player Information \nName: " + strPlayerName + " Hp: " + iPlayerHpValue +" Level: " + shPlayerLevel + " Exp: " + lAdvantureExp);
Debug.LogFormat("Player Information \nName: {0}, Hp: {1}, Level: {2}, Exp: {3}", strPlayerName, iPlayerHpValue, shPlayerLevel, lAdvantureExp);
针对上述两个日志信息输出方式,使用 Debug.Log() 输出与 Debug.LogFormat() 相比
使用 Debug.LogFormat() 将各个字符串变量填充,避免 Debug.Log() 用 + 将字符串拼接造成内存浪费
2. 画线
//绘制一条直线,两点连成直线
Debug.DrawLine(new Vector3(1, 0, 0), new Vector3(1,1,0), Color.yellow);
//绘制一条射线,一个点和一个向量
Debug.DrawRay(new Vector3(1, 0, 0), new Vector3(0, 1, 0), Color.red);
- 常用代码
3.1 获取组件
Transform trans = this.transform
3.2 获取其他组件
Collider collider = this.GetComponent<Collider>();
collider.enabled = false;
3.3 获取父物体组件
Test test = this.GetComponentInParent<Test>();
3.4 获取子物体组件
CapsuleCollider cc = this.GetComponentInChildren<CapsuleCollider>();
动态添加组件
this.AddComponent<AudioSource>();
通过物体名称找到物体
GameObject cube2 = GameObject.Find('Cube2');
cube2.name = “new cube”;
通过标签找到物体
cube2 = GameObject.FindWithTag('Person');
cube2.name = "new cube2"
//GameObject.FindGameObjectsWithTag("Person")
通过代码实例化预制体
GameObject cube2 = Instantiate(prefab, Vector3.zero, Quaternion.identity);
void Start() {
//获取脚本挂载的游戏物体
GameObject go = this.gameObject;
// 游戏物体名称
Debug.Log(go.name);
//标签
Debug.Log(go.tag);
// 获取激活状态
//这个是获取真正的激活状态,就是是否显示出来了 例如自己显示否跟父物体也有关 这个包含了
Debug.Log(go.activeInHierarchy);
//只是激活状态的勾有没有打上 也就是只判断自己
Debug.Log(go.activeSelf);
}
- unity 里面的时间设置
fixeupdate()
固定时间间隔更新,一般为0.02s更新一次,可以放与物理属性操作相关代码
也可以由用户更改时间间隔,Edit->Project Settings->Time 找到弹出面板的Fixed Timestep设置。
timeScale
是时间流逝速度的缩放比例
timeScale
为1.0时,时间是正常速度。timeScale为0.5时,时间流逝速度会降为正常速度的一般
timeScale
为0时,所有基于帧率的功能都将被暂停
Time.realtimeSinceStartup
这个值不受timeScale影响
修改timeScale
时,推荐同时与相同比例修改Time.fixedDeltaTime
timeScale
为0时,FixedUpdate函数不再执行
void Start() {
//游戏从开始到现在所用的时间
Debug.Log(Time.time);
//时间缩放数值
Debug.Log(Time.timeScale);
// Time.timeScale = 0f;
//固定时间间隔
Debug.Log(Time.fixedDeltaTime)
}
void Update {
//时间自增
timer += Time.deltaTime;
// 5s后
if (timer > 5) {
Debug.Log('大于5秒了');
timer = 0;
}
}
-
路径
StreamingAssets文件夹 建在Assets目录下
这是一个只读。不可写的目录;该目录下的资源会保持原始格式(比如图片不会被引擎进行纹理压缩);dll文件或者脚本放在该文件夹下也不会参与编译
官网推荐使用Application.streamingAssetsPath来获取该文件夹的实际位置,其可以避免平台差异Assets路径: Application.dataPath
void Start () {
//Asset路径 移动端 主机游戏:可读 不可写 pc端:可读可写
Debug.Log(Application.dataPath + "/test.txt");
//持久化路径 可读可写
Debug.Log(Application.persistentDataPath);
//临时文件
Debug.Log(Application.temporaryCachePath)
// Assets下面的streamingAssetsPath路径
Debug.Log(Application.streamingAssetsPath);
//后台运行
Debug.Log(Application.runInBackground);
//打开一个网址
Application.OpenURL("http://...")
//退出
Application.Quit()
}
-
场景代码
void Start() {
//获取当前场景
Scene scent = SceneManager.GetActiveScene();
//名称
Debug.Log(scene.name)
//场景路径
Debug.Log(scene.path)
//场景是否加载完成
Debug.Log(scene.isLoaded)
//切换场景
SceneManager.LoadScene(1);
//用场景名切换
SceneManager.LoadScene("Scene2")
//场景中最外层的游戏物体
GameObject[] gameObjects = scene.GetRootGameObjects();
Debug.Log(gameObject.Length);
//创建新场景
tmp = SceneManager.CreateScene("abc");
//切换场景
SceneManager.LoadScene("Scene2",LoadSceneMode.Additive);
}
LoadSceneMode.Additive:
当使用Unity的LoadSceneMode.Additive时,开发人员可以在当前场景中加载一个新的场景,而不需要卸载当前场景。这意味着两个场景将同时处于活动状态并可见,可以实现游戏不同区域或关卡之间的无缝过渡。这对于创建更大更复杂的游戏环境或根据需要动态加载和卸载游戏世界的部分非常有用。
- 携程加载场景
public class AsyncTest:MonoBehaviour
{
AsyncOperation operation;
void Start()
{
StartCoroutine(loadScene());
}
// 携程方法用来异步加载场景
IEnumerator loadScene() {
operation = SceneManager.LoadSceneAsync(1);
//加载完场景不要自动跳转
operation.allowSceneActivation = false;
yield return operation;
}
float timer = 0;
void Update()
{
//输出加载进度0-0.9
Debug.Log(operation.progress);
timer += Time.deltaTime;
//如果到达5秒,在跳转
if (time > 5) {
operation.allowSceneActivation = true;
}
}
}