注意事项:(笔记)
声明对象
变量声明为 Vector2 类型表明只含2D属性
变量声明为 Vector3 类型则其包含3D属性
/* 物体的position属性(x,y)储存在变量pos2中 */
Vector2 pos2 = transform.position; //transform为脚本挂载的游戏物体的transform
/*物体的position属性(x,y,z)储存在pos3中*/
Vector3 pos3 = transform.position;
碰撞器
两个游戏物体都具有碰撞器,且运动的一方有刚体组件。
Trigger触发器
触发检测:
两游戏物体都具有碰撞器,且其中一个游戏物体具有刚体组件。
可以将运动的物体设为 is Trigger。
/*持续接触触发器*/
private void OnTriggerStay2D(Collider2D collision)
{
Debug.Log("与我们发生碰撞的对象是:"+collision)
}
/*接触触发器*/
private void OnTriggerEnter2D(Collider2D collision)
{ }
/*离开触发器*/
private void On TriggerExit(Collider2D collision)
{ }
属性定义和使用
- currentHealth声明为private,外部无法访问currentHealth的值,通过定义一个属性来获取到currentHealth的值。
- 如果声明为public类型,则外部可通过访问currentHealth并改变其值,这就导致了数据的不安全。
private int currentHealth;
public int Health
{
get
{
return currentHealth;
}
}
单例模式
外部可以通过 类型.Instance. 来点出此脚本中的方法来调用
public static (脚本的类型) 变量(_instance);
public static 类型 Instance{
get{ return _instance; }
}
GetKeyDown与GetKey区别
GetKey 指按键被按下时一直持续的返回true
GetKeyDown 指按键被按下的那一帧返回true
GetKeyUp 指释放按键的那一帧返回true
if 与 else if区别
if : 所有 if 条件语句会依次执行,互相不影响。
else if : 当满足其中的一个 else if 条件时进入执行语句,其他语句不执行;
满足 if 条件时则去执行if中的语句,其他语句不执行
锁定游戏物体的位置(极轴)
在游戏物体的 rigidbody 组件下找到 Constraints 属性进行勾选对应需要锁定的轴
创建游戏物体
方法一:Start()内部创建
GameObject go = new GameObject ( " Cube " ) ; //可对游戏物体进行操作
方法二:根据Prefab或另一个物体克隆(Instance构造物体)
public GameObject prefab;
GameObject.Instantiate ( prefab ); //实例化prefab物体
方法三:创建基本游戏物体
GameObject.CreatePrimitive ( PrimitiveType.Plane ) ;
GameObject.CreatePrimitive ( PrimitiveType.Cube) ;
通过代码添加组件(AddComponent)
需要通过游戏物体来调用
//实例化cube
GameObject go = GameObject.CreatePrimitive ( PrimitiveType.Cube) ;
//给cube添加刚体组件
go.AddComponent<Rigidbody>();
//给cube添加脚本
go.AddComponent<(C#脚本名称)>();
public GameObject Prefab;
禁用和启用GameObject游戏物体
GameObject组件
- transform //每个游戏物体都有一个transform组件
- tag //通过tag区分不同的游戏物体
- activeInHierarchy //设置游戏物体是否处于激活状态
- collider //碰撞器
Debug.Log(属性); // 输出属性值
对象名.SetActive(false) // 设置游戏物体处于未激活状态
GameObject、Component、Object
查找方法:
类型名.对象名 = FindObjectOfType<类型名>();
//查找Light类型的对象light
Light light = FindObjectOfType<Light>();
//设置未激活
light.enabled = false;
//不查找未激活的游戏物体
Transform[] ts = FindObjectOfType<Transform>();
//for循环输出游戏物体名
foreach(Transform t in ts)
{
Debug.Log(t); //for循环输出游戏物体名
}
Debug.Log ( light.name ); //输出游戏物体名字
//游戏物体身上transform组件名
Debug.Log ( go.GetComponent<Transform>().name ) ;
Find() 方法
方法一:Find //通过物体名>查找,返回GameObject类型 GameObject go = GameObject.Find("Main Camera"); go.SetActive(false); //设置游戏物体未激活
方法二:FindGameObjectWithTag //根据标签查找,判断数组是否为空,数组长度是否大于0, GameObject[] gos = GameObject.FindGameObjectsWithTag("MainCamera"); gos[0].SetActive(false);
方法三:FindGameObjectWithTag //通过标签查找 GameObject go = GameObject.FindGameObjectWithTag("标签名");
延时函数调用
// t秒后调用方法
Invoke("方法名",t);