双击Cube,表示聚焦(在Scene场景中)或者按下 F键
Persp:透视视图 (会产生近大远小) ISO:平行视野(不会产生近大远小的效果)
世界坐标:以世界原点为中心的坐标 局部坐标:以父节点的中心为原点的坐标
默认单位:m 快捷键集合:QWER
红色轴:x轴 蓝色轴:z轴 绿色轴:y轴
选中游戏物体,按下F2键
project面板中创建Material文件夹———->右键create Material———–>Albedle(修改材质球的颜色)
private Rigidbody rd;
rd = GetComponent();
rd.AddForce(new Vector3(x,y,z));
x,y,z的正负——->力的方向
x,y,z的大小————->力的大小
[左右移动]:
获取用户水平轴的输入:
float h = Input.GetAxis("Horizontal");
按下A键:h=-1; 按下D键:h=1;
[前后移动]:
float v = Input.GetAxis("Vertical");
按下S键:h=-1; 按下W键:h=1;
定义一个 force:
public int force;
rd.AddForce(new Vector3(h,0,v)*force);
public Transform TargetTransform;
offest = transform.position - TargetTransform.position;
transform.position = TargetTransform.position + offset;
相当于一个模板,修改其参数,场景中所有由它复制的物体相应的参数均会改变
在预制体上添加脚本:PickUp:
void Update ()
{
transform.Rotate(new Vector3(1,0,0));
}
onCollisionEnter: 碰撞发生时(仅发生一次)
onCollisionExit: 碰撞结束后(仅发生一次)
onCollisionStay: 两个物体挨在一起(触发多次)
void OnCollisionEnter(Collision collision) //collision表示碰撞到的物体
{
//获取碰撞到物体的名字
string name=collision.collider.name; //collision.collider表示获取碰撞到物体的碰撞组件
print(name);//控制台的输出
}
如何获取到碰撞到的游戏物体对象:
collision.collider.gameObject
销毁碰撞到的游戏物体:
Destroy(collision.collider.gameObject);
出现的问题:两个物体碰撞时,会发生轻微反弹(即物理效果)
如何解决:将]碰撞器改为触发器:
Box Collider:勾上Is Trigger
void OnTriggerEnter(Collider collider)
{
if (collider.tag == "PickUp")
{
Destroy(collider.gameObject);
}
}
定义存储分数的变量score:
private int score=0;
右键 create UI——>text
白色线框代表整个屏幕范围
定义Text 组件:
public Text text;
更新分数:
text.text = score.ToString();
在Hierarchy面板中,选中Text 按住Alt键,可以等比例放大缩小text
胜利文本的显示:在代码中激活文本物体:
//创建”胜利文本对象“
public GameObject winText;
//激活文本对象:
如果在脚本中要控制一个游戏物体:
则定义一个该物体类型:
pulbic GameObject gameobject
如果在脚本中要操作(修改)某个游戏物体的某个组件:则定义为:
public 组件类型(如 Transform ,Text, Rigidbody等) xxx
buildsetting——->将所有场景拖至buildsetting中——–>pc版本,单击switch platform———->选86位或64位———->build——–.>命名
unity标准资源中,FPSController/RigidBodyFPSController
在给物体添加一张Grass001的贴图后,Grass001:shader—->Mobile——–>Particles——–>Multiply
(Direction Light 和场景中的太阳旋转是一样的)
获取系统的时间间隔:
Time.deltaTime
transform.Rotate(Vector3.up*rotateSpeed*Time.deltaTime,Space.Self);
if (bodyInventory.activeInHierarchy == true)
isActiveAndEnable
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
//获取鼠标滚轮的输入值
float mouse = Input.GetAxis("Mouse ScrollWheel");
transform.Translate(new Vector3(-h*speed, mouse*mouseSpeed, -v*speed) * Time.deltaTime, Space.World);
例:敌人路径的管理:
public static Transform[] positions;
void Awake()
{
positions = new Transform[transform.childCount];
for (int i = 0; i < positions.Length; i++)
{
positions[i] = transform.GetChild(i);
}
}
StartCoroutine();
在Update()中调用这个方法,此后每一帧重置状态时,它将不会返回true,除非用户释放这个鼠标按钮然后重新按下它,
value=0 对应左键,
value=1 对应右键,
value=2 对应中键。
//返回一条经过摄像机和指定点的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
bool isCollider = Physics.Raycast(ray, out hit, 1000, LayerMask.GetMask("MapCub"));
ray 射线的起点和方向
hit 包含碰撞到物体的信息
distance 射线的长度
layermask 投射射线,选择投射层的蒙版
Returns 返回值 当光线投射与任何碰撞器交叉时为真,否则为假。
例如:
[HideInInspector]
public GameObject turretGo;
//进入触发器
void OnTriggerEnter(Collider col){
enemys.Add(col.gameObject);
}
//离开触发器
void OnTriggerExit(Collider col){
enemys.Remove(col.gameObject);
}
yield return new WaitForSeconds(time)
yield return new WaitForSeconds(0.8f);
head.LookAt(targetPosition);
IEnumerator SpawnEnemy()
//开始执行协程
coroutine=StartCoroutine(SpawnEnemy());
//停止执行协程
StopCoroutine(coroutine);
1.返回值是IEnumerator
2.返回参数时 ,使用:yeild return null/0;
3.调用时,StartCoroutine(method());
//“Again”和”Menu“按钮
public void ButtonRetry()
{ SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
public void ButtonMenu()
{
SceneManager.LoadScene(0);
}
public void OnStartGame()
{
SceneManager.LoadScene(1);
}
public void OnExitGame()
{
Application.Quit();
}
Play On Awake(唤醒时开始播放)
勾选之后,在游戏运行起来之后,就会开始播放
设置声音是2D还是3D声音,为0时,2D,为1时 3D。
默认状态下,它是挂在摄像机上的
AudioSource常用函数
play();
stop();
pause();
GameObject.instantate(Object,Vector3,Quaternion)
Object: 用于实例化的预制体
Vector3: 实例化后生成物体所在的位置
Quaternion[四元素]: 实例化后生成物体的旋转状态
Quaternion.identity:无旋转
//生成随机数
Random.Range(min,max);
//定时销毁某个游戏物体
GameObject.Destroy(Object,float); 定时销毁某个游戏物体
Object:要销毁的游戏物体
float:多少秒后销毁
Invoke(String,float) 多少秒后执行某个函数,只会调用一次
String:要执行函数的名称
float:倒计时的时间
String:要执行函数的名称
float:准备时间,预备时间
float:重复要调用的时间间隔
CancelInvoke() 取消这个脚本中的所有Invoke()调用
private Rigidbody player;
private Transform transform;
void Start ()
{
player = GetComponent();
transform = GetComponent();
}
void Update () {
if (Input.GetKey(KeyCode.W))
{
player.MovePosition(transform.position+Vector3.forward*0.2f);
}
if (Input.GetKey(KeyCode.S))
{
player.MovePosition(transform.position + Vector3.back * 0.2f);
}
if (Input.GetKey(KeyCode.A))
{
player.MovePosition(transform.position + Vector3.left * 0.2f);
}
if (Input.GetKey(KeyCode.D))
{
player.MovePosition(transform.position + Vector3.right * 0.2f);
}
}
void OnCollisionEnter(Collision coll)
{
if (coll.gameObject.tag == "Box")
{
Destroy(coll.gameObject);
}
}
SendMessage(String)
String: 要发送消息的方法
协同程序的使用前提:只有在继承了“MonoBehaviour”这个类的子类中才能使用相关的协程方法。
IEnumerator Task3(){
yeild return new WaitforSeconds(2);
Debug.Log("任务3");
}
参数说明:
IEnumerator: 协同程序的返回值类型;
yeild Return : 协同程序返回xxx
new WaitforSeconds(s):实例化一个对象,等待多少秒后继续执行
固定更新事件,执行N次,0.02秒执行一次,
更新事件,执行N次,每帧执行一次
销毁事件,执行一次。当脚本所挂载的游戏物体被销毁时执行。
Screen.height 只读属性,屏幕的高度
Screen.width 只读属性,屏幕的宽度
常用属性:
Time.time 静态只读属性,从游戏开始到现在所经过的秒数
Time.delta time 静态只读属性,时间增量
常用函数
Mathf.Abs()
Mathf.Max()
Mathf.Min()
Mathf.Round()
Mathf.Lerp(float a,float b,float t):插值运算
基于浮点数t返回a到b之间的插值,t限制在0~1之间。
当t=0时,返回a,当t=1时,返回b.
当t=0.5,返回a和b之间的平均值
通过摄像机创建
Camer.main 代表tag设置为”MainCamera”的摄像机的Camera组件的引用
Input.mousePosition 鼠标所在的位置值
//返回的是一个Ray类型的射线
Camera.main. ScreenPointToRay(Vector3);
RayCastHit 一个结构体,用于射线的碰撞信息。
RayCastHit.point 获取射线碰撞点
Physics.Raycast(Ray,out RaycastHit) 静态方法Raycast(),射线检查
检查这根射线,如果射线与场景中的物理碰撞了,返回值为空,并且将碰撞的信息存储到RaycastHit类型的变量中。
向量A-向量B=一个从B点到A点的方向
Debug 绘制射线(只能在scene窗口中看到)
Debug.DrawRay(Vector3,Vector3,Color): 绘制射线
第一个Vector3:起点的位置
第二个Vector3: 终点减去起点得到的一个方向
Color: 射线显示的颜色
Debug.DrawLine(Vector3,Vector3,Color); 绘制线
Vector3: 绘制线的起始位置
Vector3: 绘制线的结束位置
Color: 绘制线显示的颜色
Transform.FindChild(string): 在当前物体的子物体中查找游戏物体
Transform.parent 属性 当前物体的父物体
GetComponentsInChildren() 获取所有子物体的某个组件、
GameObject.AddComponent() 给游戏物体添加组件
transform.SetParent(Transform) 将当前物体设置为另一个物体的子物体
(1)创建当前游戏状态枚举,当前游戏只有三种状态:开始,游戏中,结束
(2)查找获取三组UI的引用,并控制它们的显示次序
(3)定义一个字段存储当前的游戏状态
(4)定义一个切换游戏状态的方法
(5)通过背景声音和UI显示状态切换的效果