Unity 3d 游戏对象的创建与销毁 与 鼠标事件

创建一个平面

贴图

创建一个脚本

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 创建函数

以上三种方法都可以创建游戏物体,但是他们在使用的时候还是有区别的。
构造方法用于创建一个空的物体。
Instantiate可以实例化各种这样的东西。实例化特效、实例化游戏角色。
Createprimitive创建基本图形或者游戏中已经有的物体。

销毁对象

先创建一个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;//鼠标退出颜色改成黄色
    }

}

鼠标悬浮时颜色渐变得比较慢

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值