学习中遇到了使用enabled 来控制脚本的开关,中间遇到了一些问题,记录一下,以便遇到类似问题的新手同学少走弯路。
在想使用代码控制脚本的开启和关闭的时候,网上搜索到的解决方案是这样的:
GameObject.Find("ObjectName").GetComponent<scriptName>().enabled=true/false;
刚看到这个公式的时候一脸的懵逼,我主要纠结的是scriptName 是什么?之前做过控制灯光的开关,想了很久不知道这个地方该填写那种类型的参数,后来想想,控制灯光的时候这里天的是灯光的组件 Light。那我挂的脚本呢?应该填什么呢?(基础不到导致的问题)
下面是问题的解答:
首先:Unity中物体上有很多组件,脚本也相当于是一个组件,不过新手常常认为组件只是系统自带的那些,其实自己挂的脚本也是组件的一种。比如下图中所框选的,enabled是控制这里的勾选状态的。所以想通过脚本控制自己或者他人写的另一个脚本的参数,scriptName = 脚本名。补充:ObjectName = 脚本所挂物体的名称,比如下图为:Directional Light

代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LightEnabled : MonoBehaviour
{
private Light mylight;
private Test03 scri;
// Start is called before the first frame update
void Start()
{
mylight = GetComponent<Light>();
scri = GetComponent<Test03>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyUp(KeyCode.Space))
{
//mylight.enabled = false;
//关闭脚本,这里是关闭灯光,灯光类似于组件前面勾选状态控制
mylight.enabled = !mylight.enabled;
//!的意思是 前面的值取反当为true时候结果为false
scri.enabled = !scri.enabled;
//脚本开关状态切换
//GameObject.Find("Directional Light").GetComponent<Test03>().enabled = !GameObject.Find("Directional Light").GetComponent<Test03>().enabled;
隐藏脚本第二种写法
}
}
}