创建一个平面
贴图
创建一个脚本
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;//鼠标退出颜色改成黄色
}
}
鼠标悬浮时颜色渐变得比较慢