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();