Unity学习笔记

复制对象,直接comand+d

拖动物体一单位一单位(按住command可以按单位距离拖动)

相机的左右移动与缩放

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ViewController : MonoBehaviour
{
     
    public float speed = 1;
    public float mouseSpeed = 60;
    // Update is called once per frame
    void Update()
    {
     
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        float mouse = Input.GetAxis("Mouse ScrollWheel");
        Debug.Log(mouse);
        transform.Translate(new Vector3(-v*speed, mouse*mouseSpeed, h*speed) * Time.deltaTime,Space.World);  

    } 
}

关于如果Debug,输入Debug.Log(要输出的东西)

        Debug.Log(mouse);

在运行时点击左下角
Unity学习笔记_第1张图片
即可看到调试框

stretch调整大小

按住alt即可选择放大效果

Unity学习笔记_第2张图片

Unity在UI上按键没有反应

勾选物体,使其激活
Unity学习笔记_第3张图片
Awake方法在所挂载的物体被激活时,才能被调用

the object of type xxx has been destroyed but you are still trying to access it

Unity学习笔记_第4张图片
出现点击一个UI组件(之前已经打开过),再打开发现无法打开。
原因:此组件没有关闭,一直开着
Unity学习笔记_第5张图片
在这里打错了,将OnDestroy()打成了Destroy(),所以关闭界面时,没有将这个监听组件移除。
发布OnDestroy()即可。

Unity报错解析

Unity学习笔记_第6张图片
这里的意思是找不到相应的对象,按键绑定写错了,或者unity中组件的名字写错了,一旦无法绑定,那么后面的代码都不会执行。
下面三行报错说明,具体错误是由下到上一层层进去。
最下面是函数的入口,最上面是报错的那一行。

‘home.Main’ couldn’t be loaded because it has not been added to the build settings or the AssetBundle has not been loaded

在这里插入图片描述
参考:https://blog.csdn.net/weixin_48592526/article/details/108228335
File->Build Settings,之后拖入需要的界面
Unity学习笔记_第7张图片

scale不可见,想调试布局

可以直接进行scale的大小设置,从0,0,0改到1,1,1即可。
Unity学习笔记_第8张图片

Unity导出项目

Unity学习笔记_第9张图片
点击File->Build Setting->Build选定导出路径即可生成exe,可以直接运行

NullReferenceException:Object reference not set to an instance of an object ZjhManager_Net.Init()

在这里插入图片描述
在这里插入图片描述
原因是因为Unity里面的物件没有加了Button组件,相当于直接是个Image
Unity学习笔记_第10张图片
Add Component,加上Button即可

Can’t add script behaviour TMP_SelectionCaret.The script needs to derive from MonoBehaviour!

Unity学习笔记_第11张图片
参考:https://tieba.baidu.com/p/6100272538
解决了代码中的错误即可

Unity生成exe以后打开界面屏幕大小不对

在Canvas中将UI Scale Mode改成Scale With Screen Size
Unity学习笔记_第12张图片

unity拖不了进度条

Unity学习笔记_第13张图片
如果发现鼠标拖不了,或者拖下去马上又弹上去,则需要加Content Size Fitter组件
Unity学习笔记_第14张图片
Unity学习笔记_第15张图片
然后Vertical Fit选择Preferred Size后,即可正常拉动

unity生成exe

Unity学习笔记_第16张图片

获取物体欧拉角

定义需要的obj物体与欧拉角向量
在这里插入图片描述
找到这个物体
在这里插入图片描述
获得这个物体的欧拉角
Unity学习笔记_第17张图片

unity建立3d场景

参考:https://blog.csdn.net/yywan1314520/article/details/51404166
1.准备工作,创建新工程

Unity学习笔记_第18张图片
2创建好的工程如下图中所示,在scene场景中包含一个主摄像机(main camera)和一个方向光(DirectionalLight),如下图右中所示,点击主摄像机在场景的右下角会出面预览窗口。
Unity学习笔记_第19张图片
3.创建基本的3D场景1
3.1 在现在的场景中增加一个平面,并在平面(plane)的inspector 视图中将transform组件的position属性值设置为(0,0,0),选择GameObject -3D Object-Plane命令,建立好的平面如下图中所示。
Unity学习笔记_第20张图片
3.3 你可以根据工具栏上的菜单对所创建的几何形状进行基本的编辑
Unity学习笔记_第21张图片

改变Game界面大小

参考:https://zhidao.baidu.com/question/1639278324297185140.html

因为界面的不适配导致显示出现问题
Unity学习笔记_第22张图片
修改Game的Free Aspect即可正常显示
Unity学习笔记_第23张图片
Unity学习笔记_第24张图片

c#保留若干位小数

参考:https://www.cnblogs.com/shy1766IT/p/7580775.html

ToString(“0.00”)的作用是保留两位小数

ObstaclePanel.instance.SetObstacleSpeedText(motorbikeSpeed.ToString("0.00")+" km /h");

VS调试Unity 出现“选择Unity实例”

参考:https://blog.csdn.net/qq_41666178/article/details/109073763
选择调试->附加Unity调试程序->选择相应的Unity即可
Unity学习笔记_第25张图片
Unity学习笔记_第26张图片

unity中调用其他脚本函数的方法

参考:https://blog.csdn.net/smilingeyes/article/details/17767269

第一种,被调用脚本函数为static类型,调用时直接用 脚本名.函数名()。很不实用……

第二种,GameObject.Find(“脚本所在物体名”).SendMessage(“函数名”); 此种方法可以调用public和private类型函数

第三种,GameObject.Find(“脚本所在物体名”).GetComponent<脚本名>().函数名();此种方法只可以调用public类型函数

参考:http://bbs.itheima.com/thread-223782-1-1.html

1、static局部变量与普通局部变量的异同

相同点:都是局部变量,在函数内部定义,仅能被该模块内部的语句所访问。
不同点:
1)内存分配与释放:
static修饰的局部变量在内存中存放在静态存储区,static修饰的局部变量只有在整个程序结束的时候才会自动释放。若下次调用该局部变量所在的函数时,不需要对它重新声明,且会保留上一次调用存入的值。
普通局部变量存放在堆栈区,动态分配,其离开作用域‘{}’后,就会自动销毁,释放内存空间,无法再次使用此变量。
static局部变量在编译阶段,函数还未执行的时候,就已经分配了变量空间。
普通局部变量只有在执行到定义变量的语句时,才会分配内存空间。
2)初始化
static局部变量不初始化时,默认值为0;
普通局部变量不初始化时,默认值为随机值。

2:static全局变量与普通全局变量的异同

两者在存储方式上都是静态存储,这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

定义static全局,必须加static
Unity学习笔记_第27张图片
其它类可以直接调用
Unity学习笔记_第28张图片

安装新的包

比如需要装Unity.Mathematics
在这里插入图片描述
参考:https://blog.csdn.net/xdedzl/article/details/105308056
使用Package Manager安装数学库Mathematics。注意Jobs是集成在unity中的,不需要额外安装,Package Manager里的Jobs是提供了一些额外的Job类型。
Unity学习笔记_第29张图片
Unity学习笔记_第30张图片
安装完以后即可正常调用

Display 1 No cameras rendering

点击main camera或者如果删了主相机,切换几个display即可。

unity查看捆绑动画状态机

点击场景,查看相应单位,这样就相当于在scene内选中了target,然后点击Animator即可查看动画状态机
Unity学习笔记_第31张图片
Unity学习笔记_第32张图片
脚本挂在相应的单位上面

在update中可能场景卡顿导致动画并没有产生变化

这里算出来的speed==0,如果胡乱设置状态的话,则会出现问题。
Unity学习笔记_第33张图片
regidbody中的velocity是个客观存在的东西
在这里插入图片描述

动画状态机的播放代码

 if (speed > 0.2f)
        {
     
            anim.SetBool("IdleToAcc", true);
        }
        else
        {
     
            
            anim.SetBool("IdleToAcc", false);
            anim.SetBool("AccToInSpeed", false);
            anim.SetBool("InSpeedToDcc", false);

        }
        if (speed < 0.5f)
        {
     
            anim.SetBool("AccToDcc", true);

        }
        else
        {
     
           anim.SetBool("AccToDcc", false);
        }
        if (speed > 5f)
        {
     
            anim.SetBool("AccToInSpeed", true);
        }
        if (speed < 5f)
        {
     
            anim.SetBool("InSpeedToDcc", true);
        }
        else
        {
     
            anim.SetBool("InSpeedToDcc", false);
        }


        if (transform.root.eulerAngles.z > 280 && transform.root.eulerAngles.z < 340)
        {
     
            anim.SetBool("RightTurn", true);

        }
        else
        {
     
            anim.SetBool("RightTurn", false);

        }
        if (transform.root.eulerAngles.z > 20 && transform.root.eulerAngles.z < 80)
        {
     
            anim.SetBool("LeftTurn", true);

        }
        else
        {
     
            anim.SetBool("LeftTurn", false);

        }

计算向量长度

var speedVal = speed.magnitude;

求两向量角度

float angle = Vector3.Angle(xl1, xl2);

声明Vector3变量数组

private const int queuenum = 1000;
Vector3[] pos= new Vector3[queuenum+1];

将物体的朝向看向一个坐标

gameObject.transform.LookAt(tar);

你可能感兴趣的:(Unity)