这段时间学习了unity的官方项目秘密行动
第一个知识点:InvkokeReapting()方法的使用 以此延伸的知识点
Invoke
1
2
3
|
Invoke(methodName:
string
, time:
float
):
void
;
methodName:方法名
time:多少秒后执行
|
InvokeRepeating
1
2
3
4
|
InvokeRepeating(methodName:
string
, time:
float
, repeatRate:
float
):
void
;
methodName:方法名
time:多少秒后执行
repeatRate:重复执行间隔
|
还有两个重要的方法:
- IsInvoking:用来判断某方法是否被延时,即将执行
- CancelInvoke:取消该脚本上的所有延时方法
场景中的激光门分为两种一种是开锁会自动解除一种是来回闪烁的。
开锁解除的激光门比较好做,在拿到钥匙要触发碰撞器隐藏机关门就可以。来回闪烁的门我思考可以用协程或者延迟InvokeReapting来做
//这是我控制两个机关门来回闪烁使用携程来做的
public class DelayPlay : MonoBehaviour
{
public GameObject ray1;//射线1
public GameObject ray2;//射线2
void Start ()
{
StartCoroutine(ShowRay());
}
IEnumerator ShowRay()
{
ray1.SetActive(true);
ray2.SetActive(false);
Debug.Log("关闭激光");
Invoke("hideray",2);
yield return new WaitForSeconds(3f);
StartCoroutine(ShowRay());
}
void hideray()
{
ray1.SetActive(false);
ray2.SetActive(true);
}
}
这是我的第二种用Invoke做的
public class Delay2 : MonoBehaviour
{
public GameObject ray1;
public GameObject ray2;
private int i = 0;
void Start ()
{
InvokeRepeating("ShowRay", 1, 2);
}
void ShowRay()
{
if (i%2==0)
{
ray1.SetActive(true);
ray2.SetActive(false);
}
else
{
ray1.SetActive(false);
ray2.SetActive(true);
}
i++;
}
}
二、替换开锁图片
这个很简单,通过代码过得Renderer后得到material修改material就可以更换图片。
gameObject.GteComponent<Renderer>().material=replaceMaterial;