Uniyt3D笔记Unity笔记向量的减法unity旋转的方式:1、欧拉角:沿自身角度旋转的度数unity欧拉角其实是四元数2、四元数:(1,1,1,1)Transform组件作用:1、控制游戏对象的变换位置旋转缩放2、维持父子关系脚本组件:(添加到游戏对象上以实现用户自定义的一些功能)1、自动继承MonoBehaviour类2、类名必须与脚本名一致3、transform.parent;获取/重新指定当前游戏对象父对象的transform组件4、transform.root;获取当前游戏对象的根父对象5、transform.Find(”Cube“);获取当前游戏对象叫做Cube的对象6、transform.FindChild(“Cube”);获取当前游戏对象叫做Cube的对象,如果多个默认返回第一个7、transform.Position:世界坐标系中的位置8、transform.locaPosition:局部坐标系中的位置9、transform.rotation;世界坐标系中的位置四元数10、transform.localRotation;局部坐标系中的位置四元数11、transform.localScale;x,y,z轴缩放比例操作12、transform.Translate;对象的位置移动操作13、transform.Rotate;对象的轴旋转操作14、transform.eulerAngles=newVector3(0f,45f,0f);欧拉角-属性回调方法UnityC#脚本默认方法继承MonoBehaviour被叫做运行时类,运行时不能手动实例化publicclasshello:MonoBehaviour//默认继承MonoBehaviour类{//Usethisforinitialization//在游戏开始的第一帧运行一次voidStart(){}//Updateiscalledonceperframe//每一帧调用一次voidUpdate(){}}Unity脚本生命周期系统自带9个回调方法Uniyt3D笔记这写方法都不是MonoBehaviour中定义的方法,而是通过反射调用的一些事件一:游戏开始的第一帧执行一次的方法:Awake:在游戏开始的第一帧执行一次,你的脚本组件无论是可用还是不可用,它都会执行,在Awake中做一些初始化操作OnEnable:当脚本组件激活的时候执行一次被调用Start:游戏开始第一帧执行一次,在第一次调用Update之前调用一次Start,做一些初始化操作,初始化public成员二:游戏开始后持续执行FixedUpdate:每0.02秒执行一次,固定时间间隔默认0.02秒调用,一般我们会把处理物理的代码放在这里Update:每帧执行一次,执行的次数取决于计算机的配置(用于写人物移动逻辑)LateUpdate:每帧执行一次,(用于写摄像机移动逻辑),在Update方法调用完之后调用三:OnGUI持续调用OnGUI:IMGUI-代码需要写在OnGUI方法中每帧执行两次,游戏开始到结束持续执行四:不可用的时候执行OnDisable:当脚本组件处于不可用状态的时候执行一次,取消激活状态后调用OnDestroy:当脚本组件被销毁时,执行一次常用调式方法:1、Print()属于MonoBehaviour类的成员2、DEbug.Log()独立,密封的类常用调式方法Ctrl+shift+N新建空物体Debug.DrawLine()创建一条射线//画一条射线Debug.DrawRay(newVector3(0,0,0),newVector3(0,0,1),Color.red);设置脚本执行顺序:Edit-ProjectSettings-ScripeExecutionOrderUniyt3D笔记Unity自身也有一个object类常用类一、GameObject游戏对象类01:gameObjectthis.获取当前脚本所挂载的游戏对象,在属性面板中能够修改的组件都能通过脚本进行修改获取1、gameObject.activeSelf:游戏对象激活状态2、gameObject:表示当前脚本组件所挂载的游戏对象,返回true或false3、gameObject.SetActive(false):设置游戏对象的激活状态4、gameObject.name;表示游戏对象的名称5、gameObject.tag;表示游戏对象的标签6、gameObject.layer;表示游戏对象的层7、GameObject.Find(MainCamera);通过游戏对象的名称进行查找,返回的是一个游戏对象8、GameObject.FindWithTag(Player);通过游戏对象的标签查找游戏对象,返回一个游戏对象9、GameObject.FindGameObjectsWithTag(Hot);通过游戏对象的标签查找多个游戏对象,返回一个游戏对象数组10、gameObject.AddComponent();给游戏对象添加指定类型的组件11、GameObject.Destroy(gameObject);立刻销毁游戏对象12、GameObject.Destroy(gameObject,5f);延时销毁游戏对象float类型的参数销毁当前脚本所挂载的游戏对象获取组件的方法:普通的成员方法//1找到摄像机对象声明一个对象进行接收GameObjectcamera=GameObject.FindWithTag(MainCamera);//2找到摄像机身上的组件表示得到组件的类名称无参数,小括号floatdp=camera.GetComponentCamera().depth;//打印结果Debug.Log(dp);//找到Cube输出位置坐标Vector3pos=GameObject.Find(Cube).GetComponentTransform().position;Debug.Log(pos);transform:表示当前游戏组件所挂载的游戏对象身上的Transform组件Uniyt3D笔记this.GetComponentGameObjectClass();获取当前游戏对象身上的组件对于父物体与子物体的坐标位置,子物体分别有相对于父物体的世界坐标点与自己的坐标点//让物体产生移动transform.position+=newVector3(0,0,0.01f);//每秒走0.01秒transform.Translate(newVector3(0,0,0.01f));//与上一个一样的效果//让物体产生旋转transform.Rotate(newVector3(1,0,0));//让物体每帧延x轴转1度transform.eulerAngles+=newVector3(0,0,2);//与上一个一样的效果//绕着一个物体旋转transform.RotateAround(newVector3(0,0,0),newVector3(0,1,0),50);星球的自转与公转publicclassStarRun:MonoBehaviour{//星球的直径publicfloatradius=0.5f;//星球的材质颜色publicColorcolor;//星球自转的速度publicfloatrotationSpeed=3f;//星球的公转速度publicfloatrotationAroundSpeed=3f;//公转所绕行的星球publicTransformaroundPoint;voidStart(){//设置球体半径,半径为1的时候*半径*2等于直径transform.localScale=Vector3.one*radius*2;//星球的材质,设置球体的颜色GetComponentMeshRenderer().material.color=color;}voidUpdate(){Rotation();AroundRotation();}///summary///自转////summaryvoidRotation(){//设置星球的自转transform.Rotate(Vector3.up*rotationSpeed);}///summary///公转////summaryvoidAroundRotation(){//设置星球的公转,位置,方向,速度transform.RotateAround(aroundPoint.position,Vector3.up,rotationAroundSpeed);}}坦克发射子弹1:publicclassFireMoeBullet:MonoBehaviour{//Bullet预设体Uniyt3D笔记publicGameObjectbullet;voidUpdate(){Fire();}//子弹Bullte发射的方法voidFire(){if(Input.GetMouseButtonUp(0))//如果按下了鼠标左键{//通过预设体在炮筒方向生成一个子弹bullet,强制转换GameObjectcurrentBullet=(GameObject)Instantiate(bullet,transform.GetChild(3).position,Quaternion.identity);//给子弹一个方向currentBullet.GetComponentMoveBullte().dir=transform.forward;}}}2:publicclassMoveBullte:MonoBehaviour{//bullet移动publicfloatmoveSpeed=10f;publicfloatdeadTime=3f;publicVector3dir;voidFixedUpdate(){//定时销毁当前子弹对象Destroy(gameObject,deadTime);}voidUpdate(){//子弹移动transform.position+=dir*moveSpeed*Time.deltaTime;}}二、Input类获取用户事件时使用一般都写在Update方法中0表示左键,1表示右键,2表示中键滚轮【一Mouse方法鼠标】1、GetMouseButtonDown(0)获取鼠标按下的事件2、GetMouseButton(1)获取鼠标持续按下的事件3、GetMouseButtonUp(2)获取鼠标弹起的事件4、fieldOfView=60视野角度【二GetKey方法键盘】1、GetKey(KeyCode.W)获取按键持续按下的事件2、GetKeyDown(KeyCode.W)获取按键按下的事件3、GetKeyUP(KeyCode.W)获取按键弹起的事件4、如果一个值类型常量为公有的,那么unity脚本面板比脚本文件拥有更大的优先级。Input类简介与虚拟按键Horizontal:水平方向Vertical:垂直方向Uniyt3D笔记Rotate旋转角度RotateAround:旋转轴//Pet绕着Tank目标旋转publicTransformtarget;//声明组件//表示绕着父物体的轴向进行指定度数旋转voidUpdate(){//X轴顺时针旋转【left左】transform.RotateAround(target.position,Vector3.left,2);//X轴逆时针旋转【right右】transform.RotateAround(target.position,Vector3.right,2);//Y轴顺时针旋转【up上】transform.RotateAround(target.position,Vector3.up,2);//Y轴逆时针旋转【down下】transform.RotateAround(target.position,Vector3.down,2);//Z轴顺时针旋转【back后】transform.RotateArou