创建一个平面
贴图
创建一个脚本
GameObjectOperation.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameObjectOperation : MonoBehaviour { GameObject[] capsuleArray = new GameObject[3]; public GameObject cubeObject; // Start is called before the first frame update void Start()//开始的时候执行 { cubeObject.AddComponent<MouseEvents>();//给cube对象绑定一个鼠标事件的组件(另一个脚本) GameObject cubeObj = GameObject.CreatePrimitive(PrimitiveType.Cube);//利用脚本创建一个cube cubeObj.name = "Red_Cube"; cubeObj.tag = "Cubes";//设置标签,待会儿要添加,以便查找 cubeObj.GetComponent<Renderer>().material.color = Color.red;//调用渲染组件,把材质设成红色 cubeObj.transform.position += new Vector3(0, 1, 0);//位置往上移一点 Debug.Log("the position of cube "+cubeObj.transform.position);//输出cube的位置 GameObject sphereObj = GameObject.CreatePrimitive(PrimitiveType.Sphere); sphereObj.name = "Green_Sphere"; sphereObj.tag = "Spheres"; sphereObj.GetComponent<Renderer>().material.color = Color.green; sphereObj.transform.position += new Vector3(5, 1, 0); capsuleArray[0] = GameObject.CreatePrimitive(PrimitiveType.Capsule); capsuleArray[0].name = "Capsule_red"; capsuleArray[0].tag = "Capsules"; capsuleArray[0].GetComponent<Renderer>().material.color = Color.red; capsuleArray[0].transform.position += new Vector3(-1, 6, 0); capsuleArray[1] = GameObject.CreatePrimitive(PrimitiveType.Capsule); capsuleArray[1].name = "Capsule_green"; capsuleArray[1].tag = "Capsules"; capsuleArray[1].GetComponent<Renderer>().material.color = Color.green; capsuleArray[1].transform.position += new Vector3(-1, 4, 0);//2->4放在上面 capsuleArray[2] = GameObject.CreatePrimitive(PrimitiveType.Capsule); capsuleArray[2].name = "Capsule_blue"; capsuleArray[2].tag = "Capsules"; capsuleArray[2].GetComponent<Renderer>().material.color = Color.blue; capsuleArray[2].transform.position += new Vector3(-1, 2, 0);//让它们三个串在一起 GameObject cloneCube = Instantiate(cubeObj, new Vector3(0,3,0), Quaternion.identity);//创建对像的第三种方法,克隆一个对象:对象,位置坐标,旋转与否 cloneCube.GetComponent<Renderer>().material.color = Color.magenta; GameObject emptyObj = new GameObject("EMPTY_CUBE");//创建一个空对象 Debug.Log("create empty" + emptyObj.name); } // Update is called once per frame void Update()//每一帧都执行 { if(Input.GetKey(KeyCode.A))//用键盘查找对象,按下A,改变cube颜色为黄 { GameObject findObj = GameObject.Find("Red_Cube");//创建一个查找对象 findObj.GetComponent<Renderer>().material.color = Color.yellow; } if(Input.GetKey(KeyCode.S)) { GameObject[] gameObjects = GameObject.FindGameObjectsWithTag("Capsules");//查找一组对象,创建一个数组 for(int i=0;i<gameObjects.Length;i++) { gameObjects[i].GetComponent<Renderer>().material.color = Color.white; } } if (Input.GetKey(KeyCode.D)) { GameObject sphereobj = GameObject.FindWithTag("Spheres"); sphereobj.GetComponent<Renderer>().material.color = Color.cyan; } if(Input.GetMouseButtonDown(0))//鼠标左键禁用脚本 { cubeObject.SetActive(false); } if (Input.GetMouseButtonDown(1))//鼠标右键激活脚本 { cubeObject.SetActive(true); } if(Input.GetButton("Jump")) { Destroy(cubeObject); } } }
GameObjectOperation.cs 脚本执行效果:
A 通过标签查找,改变cube颜色为黄
S 通过标签查找,让数组中三个胶囊颜色变成白色
D 通过标签查找,让球体变成Cyan蓝。
鼠标左键 禁用脚本中设定的public类型的cube object对象(在unity界面中设置为cube)
鼠标右键 激活脚本中设定的public类型的cube object对象
空格键 销毁脚本中设定的public类型的cube object对象
创建一个空的对象 以绑定脚本 GameObjectOperation.cs
但是仅仅这样是不够的,会报错:
脚本中的Cube Object不能为空,否则就不能创建对象
Whatever,随便设置一个(最好设置为一个预先创建的cube),再点击运行,就成功了
利用脚本创建对象
一部分代码:
出现如下错误:
原因:标签未定义
解决方法:
结果:
创建数组存储游戏对象
创建游戏对象三种方法
1 构造函数
2 克隆函数
3 创建函数
销毁对象
先创建一个cube对象
把脚本的cube object设为cube
点击空格即可销毁
代码:
public GameObject cubeObject; if(Input.GetButton("Jump")) { Destroy(cubeObject); }
鼠标事件处理:
鼠标进入,鼠标悬浮,鼠标退出,颜色都要改变
创建一个MouseEvents.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseEvents : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } private void OnMouseEnter() { gameObject.GetComponent<Renderer>().material.color = Color.blue;//鼠标进入改成蓝色 } private void OnMouseOver() { gameObject.GetComponent<Renderer>().material.color += new Color(0.1f, 0, 0) * Time.deltaTime;//鼠标悬浮颜色渐变,三个参数对应RGB } private void OnMouseExit() { gameObject.GetComponent<Renderer>().material.color = Color.yellow;//鼠标退出颜色改成黄色 } }
鼠标悬浮时颜色渐变得比较慢
原博地址
https://blog.csdn.net/weixin_43673589