UnityAPI学习笔记1(课时1-19)

这篇博客详细介绍了Unity API的学习,重点包括事件函数的执行顺序,如FixedUpdate、Update和LateUpdate的使用场景,以及Time类中的各种时间间隔和控制方法。此外,还讲解了游戏物体的创建、组件添加、禁用启用,以及查找物体的各种方法。最后,文中提到了MonoBehavior中的关键变量和方法,如Invoke系列的调用控制。
摘要由CSDN通过智能技术生成

1.前提准备

下载源码,学习笔记和导图。
准备好开发环境,如何查看API文档

2.事件函数

打开Scripting Renference,查看UnityAPI中的事件函数执行顺序。从中可以了解到大部分主要的事件函数使用方法。
注:事件方法在被触发时必须拼写正确。
根据课程和官网教程,测试常用方法,理解它们的用法。如:
在这里插入图片描述
FixedUpDate一般是固定的调用,可运用于物体的物理运动;UpDate和LateUpDate都是每帧调用一次,但LateUpDate比UpDate后调用,这两个的调用次数的多少与电脑性能和程序有关。暂停后,他们的调用也会停止。
在这里插入图片描述
当在Inspector面板中的物体复选框被勾选或去掉时会出现,表示物体是否被调用开启。
在这里插入图片描述
用户停止播放时会调用OnApplicationQuit;因为退出播放,使物体行为停用也调用了OnDisable;因OnDestroy属于销毁物体时使用的函数,退出时也被调用了一次。

3.Time类

注意:Time类中的出现的数值单位是秒。

1.fixedDeltaTime:时间设置中默认的固定时间间长时0.02秒。
deltaTime:每一帧的时间间隔,这个间隔会因运行时的代码,电脑情况等发生变化。
11
2.unscaledTime:记录的是游戏播放开始到运行停止的总的时间。
在这里插入图片描述

3.Time和timeSinceLevelLoad和fixedTime属于游戏运行中的占用时间,不算暂停时的那段时间。
在这里插入图片描述在这里插入图片描述
4.realtimeSinceStartup:游戏开始到现在所占用的时间(算上暂停的时间)在这里插入图片描述
5.frameCount:帧数。
在这里插入图片描述
Timescale:设置时间的比例。
实例化:
TimedeltaTime和realTimeSinceStartup的使用。
实例1:

public class API02Time : MonoBehaviour {
public Transform cube;
void Update () 
{
cube.Translate(Vector3.forward * Time.deltaTime);
Time.timeScale = 3f;
}
}


当不Time.deltaTime时,由于默认的时每秒50帧,cube每秒会移动50米。 Time.deltaTime后,cube一般是每秒移动一帧的距离,想要快点可在后面*浮点数。Time.timeScale 可以统一控制移动速度快慢(只要有使用Time.deltaTime)。

实例2:

public class API02Time : MonoBehaviour {
public int runcount=100000;
void Start ()  
{
       float time1 = Time.realtimeSinceStartup;
        for (int i = 0; i < runcount; i++)
        {
            Method1();
        }
        float time2 = Time.realtimeSinceStartup;
        Debug.Log(time2 - time1);
        float time3 = Time.realtimeSinceStartup;
        for (int i = 0; i < runcount; i++)
        {
            Method2();
        }
        float time4 = Time.realtimeSinceStartup;
        Debug.Log(time4 - time3);
}
    void Method1()
    {
        int i = 2;
        i += 2;
        i += 2;
    }
    void Method2()
    {
        int i = 2;
        i *= 2;
        i *= 2;
    }

在这里插入图片描述
Time.realtimeSinceStartup可以计算运算的时间。对比加法运算和乘法运算的运算时间。

4.游戏物体

创建游戏物体:

public GameObject prefab;
void Start () {
        //第一种创建方法
        //GameObject go=new GameObject("Cube");
        //第二种创建方法(根据prefab或另一个物体)
        //GameObject.Instantiate(prefab);//可以根据prefab或者另外一个游戏物体克隆
        //第三种创建方法(原始几何体)
        GameObject.CreatePrimitive(PrimitiveType.Capsule);
        GameObject.CreatePrimitive(PrimitiveType.Cube);
        GameObject.CreatePrimitive(PrimitiveType.Cylinder);
}

添加组件(AddComponent),例:

GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);
go.AddComponent<Rigidbody>();

这样就能添加Rigidbody组件了。

如何禁用和使用一个游戏物体(用activeInHierarchy),例:

GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube)	 
Debug.Log(go.activeInHierarchy);//activeInHierarchy属于bool类型,默认true开启,输出值。
go.SetActive(false);//禁用物体
Debug.Log(go.activeInHierarchy);//输出此时状态值。

在这里插入图片描述
游戏组成的概念:
在这里插入图片描述
常用组件:
Rigibody
Transform
Mesh Render
MeshFilter
Collider
NavmeshAgent
Animation
Animator
自定义的脚本

注:GameObject和Component都继承于object,它们都拥有object中的东西,但又有另外的东西。

查找物体的方法:
•GameObject.Find(对象名称)

例:找到摄像机并关掉它

GameObject go=GameObject.Find("Main Camera");
go.SetActive(false);

•使用标签查找
GameObject.Find WithTag(“XXX”)—只返回一个。
GameObject.FindGameObjectsWithTag(“XXX”)----查找所有标签名为XXX的物体,返回的是一个数组。

例:找到摄像机并关掉它

GameObject go = GameObject.FindWithTag("MainCamera");
go.SetActive(false);

•根据物体类型查找
Object.FindObjectOfType<>()—返回第一个Type类型的活动加载对象。
Object.FindObjectsOfType<>() —返回所有类型为Type的活动加载对象的列表,是一个数组。

例:找到摄像机并关掉它

Camera camera = Object.FindObjectOfType<Camera>();
 camera.enabled = false;

游戏物体间消息的发送和接收:
前提:主物体和子物体都添加了同一个接收脚本
使用BroadcastMessage(适用于当前物体被调用,包括它的孩子。)
在这里插入图片描述
使用SendMessage(只会当前物体调用,不包括它的孩子。)
在这里插入图片描述
使用SendMessageUpwards(当前物体以及其所有父亲都会被调用,向上走的)
在这里插入图片描述

获取组件的方式:
在这里插入图片描述
例:

public class API05GetComponent : MonoBehaviour {
    public GameObject target;
		void Start () {
        Cube cube = target.GetComponent<Cube>();
        Transform t = target.GetComponent<Transform>();
        Debug.Log(cube);
        Debug.Log(t);
        Debug.Log("-------------------------------------");
        Cube[] cubes = target.GetComponents<Cube>();
        Debug.Log(cubes.Length);
        Debug.Log("-------------------------------------");
        cubes = target.GetComponentsInChildren<Cube>();
        foreach (Cube c in cubes)
        {
            Debug.Log(c);
        }
        Debug.Log("-------------------------------------");
        cubes = target.GetComponentsInParent<Cube>();
        foreach (Cube c in cubes)
        {
            Debug.Log(c);
        }
    }	
}

在这里插入图片描述

5.MonoBehavior

常用变量:
isActiveAndEnabled
enabled(bool变量)=true/false
Transform
tag
name
print
gameobject
各种调用的使用:
Invoke调用
IsInvoking 是否被调用
InvokeRepeating 重复调用
CancelInvoke取消调用

练习:

public class API07Invoke : MonoBehaviour {
		void Start () {
        //Invoke("Attack", 3);//三秒后调用
        //InvokeRepeating("Attack",4,2);//每2秒调用一次,四秒后开始调用第一次
        CancelInvoke("Attack");//取消调用
	}	
	void Update () {
        bool res = IsInvoking("Attack");//是否被调用
        Debug.Log(res);
	}
    void Attack()
    {
        print("攻击目标");
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值