Unity 笔记

  • 格式:docx
  • 大小:5.93 MB
  • 文档页数:28

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=new Vector3(0f,45f,0f); 欧拉角 - 属性

回调方法

Unity C#脚本默认方法继承MonoBehaviour 被叫做运行时类,运行时不能手动实例化

public class hello : MonoBehaviour //默认继承MonoBehaviour 类

{

// Use this for initialization //在游戏开始的第一帧运行一次

void Start()

{

}

// Update is called once per frame //每一帧调用一次

void Update()

{

}

}

Unity脚本生命周期 系统自带 9 个回调方法

Uniyt3D 笔记

这写方法都不是MonoBehaviour中定义的方法,而是通过反射调用的一些事件

一:游戏开始的第一帧执行一次的方法:

Awake:在游戏开始的第一帧执行一次,你的脚本组件无论是可用还是不可用,它都会执行,在Awake中做一些初始化操作

On Enable:当脚本组件激活的时候执行一次被调用

Start:游戏开始第一帧执行一次,在第一次调用Update之前调用一次Start,做一些初始化操作,初始化public成员

二:游戏开始后持续执行

Fixed Update:每0.02秒执行一次,固定时间间隔默认0.02秒调用,一般我们会把处理物理的代码放在这里

Update:每帧执行一次,执行的次数取决于计算机的配置(用于写人物移动逻辑)

Late Update:每帧执行一次,(用于写摄像机移动逻辑),在Update方法调用完之后调用

三:On GUI 持续调用

On GUI:

IMGUI-代码需要写在OnGUI方法中 每帧执行两次,游戏开始到结束持续执行

四:不可用的时候执行

On Disable:当脚本组件处于不可用状态的时候执行一次,取消激活状态后调用

On Destroy:当脚本组件被销毁时,执行一次

常用调式方法:

1、Print() 属于MonoBehaviour类的成员

2、DEbug.Log () 独立,密封的类 常用调式方法

Ctrl+shift+N 新建空物体

Debug.DrawLine() 创建一条射线

//画一条射线

Debug.DrawRay(newVector3(0,0,0),newVector3(0,0,1),Color.red);

设置脚本执行顺序: Edit - Project Settings - Scripe Execution Order

Uniyt3D 笔记

Unity自身也有一个object类

常用类

一、Game Object 游戏对象类

01:gameObject this. 获取当前脚本所挂载的游戏对象,在属性面板中能够修改的组件都能通过脚本进行修改获取

1、gameObject.activeSelf: 游戏对象激活状态

2、gameObject:表示当前脚本组件所挂载的游戏对象,返回true或false

3、gameObject.SetActive(false):设置游戏对象的激活状态

4、; 表示游戏对象的名称

5、gameObject.tag; 表示游戏对象的标签

6、yer; 表示游戏对象的层

7、GameObject.Find("Main Camera");通过游戏对象的名称进行查找,返回的是一个游戏对象

8、GameObject.FindWithTag("Player");通过游戏对象的标签查找游戏对象,返回一个游戏对象

9、GameObject.FindGameObjectsWithTag("Hot"); 通过游戏对象的标签查找多个游戏对象,返回一个游戏对象数组

10、gameObject.AddComponent<>(); 给游戏对象添加指定类型的组件

11、GameObject.Destroy(gameObject); 立刻销毁游戏对象

12、GameObject.Destroy(gameObject,5f); 延时销毁游戏对象 float类型的参数

销毁当前脚本所挂载的游戏对象

获取组件的方法:普通的成员方法

// 1 找到摄像机对象 声明一个对象进行接收

GameObject camera = GameObject.FindWithTag("MainCamera");

//2 找到摄像机身上的组件 <>表示得到组件的类名称 无参数,小括号

float dp = camera.GetComponent().depth;

//打印结果

Debug.Log(dp);

//找到Cube 输出位置坐标

Vector3 pos = GameObject.Find("Cube").GetComponent().position;

Debug.Log(pos);

transform:表示当前游戏组件所挂载的游戏对象身上的Transform组件

this.GetComponent();获取当前游戏对象身上的组件

对于父物体与子物体的坐标位置,子物体分别有相对于父物体的世界坐标点与自己的坐标点 Uniyt3D 笔记

//让物体产生移动

transform.position+=new Vector3(0,0,0.01f); //每秒走0.01秒 transform.Translate(new Vector3(0, 0, 0.01f));//与上一个一样的效果

//让物体产生旋转

transform.Rotate(new Vector3(1, 0, 0)); //让物体每帧延x轴转1度

transform.eulerAngles += new Vector3(0, 0, 2);//与上一个一样的效果

//绕着一个物体旋转

transform.RotateAround(new Vector3(0,0,0),new Vector3(0,1,0),50 );

星球的自转与公转

publicclassStarRun : MonoBehaviour

{

//星球的直径

publicfloat radius = 0.5f;

//星球的材质颜色

publicColor color;

//星球自转的速度

publicfloat rotationSpeed = 3f;

//星球的公转速度

publicfloat rotationAroundSpeed = 3f;

//公转所绕行的星球

publicTransform aroundPoint;

void Start()

{

//设置球体半径,半径为1的时候*半径*2等于直径

transform.localScale = Vector3.one*radius*2;

//星球的材质,设置球体的颜色

GetComponent().material.color = color;

}

void Update()

{

Rotation();

AroundRotation();

}

///

/// 自转

///

void Rotation()

{

//设置星球的自转

transform.Rotate(Vector3.up*rotationSpeed);

}

///

/// 公转

///

void AroundRotation()

{

//设置星球的公转,位置,方向,速度

transform.RotateAround(aroundPoint.position, Vector3.up, rotationAroundSpeed);

}

}

坦克发射子弹

1:

publicclassFireMoeBullet : MonoBehaviour

{

//Bullet预设体

publicGameObject bullet;

void Update()

{

Fire();