通过C#脚本实现旋转的立方体

一、介绍

目的:通过一个简单的例子(鼠标点击,使立方体旋转和变色)熟悉Unity中C#脚本的编写。

软件环境:Unity 2017.3.0f3 、 VS2013。

二、C#脚本实现

1,启动Unity,创建游戏场景。【关于Unity基本操作请点击 Unity入门教程(上)进行了解】

2,在Assets目录下创建文件夹,用于存放游戏的各种资源。

3,创建一个名为CubeRotate的C#脚本并拖放到场景的方块上,调整好相机位置。

4,双击打开脚本,在脚本中加入鼠标相关函数

5,设定一个功能:当鼠标光标移动到物体上时,物体材质色彩变为黄色。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeRotate : MonoBehaviour {

    private bool bCube1 = false;
    private bool bCube2 = false;
    private Color OldColor;

    // Use this for initialization
    void Start () {
        OldColor = this.gameObject.GetComponent<Renderer>().material.color; //获取物体的原始颜色
    }
    
    // Update is called once per frame
    void Update () {
        
    }

    void OnMouseOver()
    {
        this.gameObject.GetComponent<Renderer>().material.color = Color.yellow; //立方体变为黄色
        bCube1 = true;
    }
    void OnMouseExit()
    {
        this.gameObject.GetComponent<Renderer>().material.color = OldColor; //立方体变为原始颜色
        bCube1 = false;
    }
    void OnMouseDown()
    {
        if(bCube1)
        {
            bCube2 = true;
        }
    }

}

代码解读:当鼠标光标移动到物体上时,物体变为黄色,同时将一个初始值为false的bCube1的值变为true;当鼠标光标离开后,物体材质色彩还原,bCube1为false;当按下鼠标左键,且bCube1的值为true,bCube2的值为真。

注:OnMouse函数都是执行一次的函数,因此不能将与动画有关的控制函数放于其内执行,所以通常会用布尔值开关来控制Update函数中的动画函数。

6,在Update函数里实现Cube转动

    void Update () {
        if(bCube2) //当Cube为真时
        {
            this.gameObject.transform.Rotate(Vector3.up * Time.deltaTime * 200);  //Cube转动
        }
    }

因为Cube转动是持续性的,所以把旋转脚本写在Update函数里面实现Cube转动。

7,更改Spotlight的强度

    // Use this for initialization
    void Start () {
        OldColor = this.gameObject.GetComponent<Renderer>().material.color; //获取物体的原始颜色
        GameObject.Find("Spotlight").GetComponent<Light>().intensity = 1.0F;  //获取Spotlight的强度属性
    }
    
    // Update is called once per frame
    void Update () {
        if(bCube2) //当Cube为真时
        {
            this.gameObject.transform.Rotate(Vector3.up * Time.deltaTime * 200);  //Cube转动
            if(GameObject.Find("Spotlight").GetComponent<Light>().intensity < 8.0F)
            {
                GameObject.Find("Spotlight").GetComponent<Light>().intensity += 0.05F;
            }
        }
    }

8,UGUI的使用->添加Text组件

9,添加控制Text显示的脚本

使用UGUI组件必须在C#脚本中添加UI的命名空间,这样我们才能引用。当bCube2的值为真时,Text组件显示“Cube正在旋转中...”,所以在Update函数的if语句里面应添加以下脚本

            GameObject.Find("Text").GetComponent<Text>().text = "Cube正在旋转...";

10,点击“Play”按钮,运行游戏

鼠标点击前:

鼠标点击后:

11,完整脚本代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;  //添加UI的命名空间

public class CubeRotate : MonoBehaviour {

    private bool bCube1 = false;
    private bool bCube2 = false;
    private Color OldColor;

    // Use this for initialization
    void Start () {
        OldColor = this.gameObject.GetComponent<Renderer>().material.color; //获取物体的原始颜色
        GameObject.Find("Spotlight").GetComponent<Light>().intensity = 1.0F;  //获取Spotlight的强度属性
    }
    
    // Update is called once per frame
    void Update () {
        if(bCube2) //当Cube为真时
        {
            this.gameObject.transform.Rotate(Vector3.up * Time.deltaTime * 200);  //Cube转动
            GameObject.Find("Text").GetComponent<Text>().text = "Cube正在旋转...";

            if(GameObject.Find("Spotlight").GetComponent<Light>().intensity < 8.0F)
            {
                GameObject.Find("Spotlight").GetComponent<Light>().intensity += 0.05F;
            }
        }
    }

    void OnMouseOver()
    {
        this.gameObject.GetComponent<Renderer>().material.color = Color.yellow; //立方体变为黄色
        bCube1 = true;
    }
    void OnMouseExit()
    {
        this.gameObject.GetComponent<Renderer>().material.color = OldColor; //立方体变为原始颜色
        bCube1 = false;
    }
    void OnMouseDown()
    {
        if(bCube1)
        {
            bCube2 = true;
        }
    }

}

三、总结

通过学习我们了解了C#脚本对于游戏对象的作用,中间还学习了UGUI的使用。

Unity脚本语言的综合应用并不是通过一个实例就能够达到熟练的程度,还需要自己不断地练习和探索,不断的尝试bug和及时总结。 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4025
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

31710
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2070
来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4064
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2577
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6828
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2717
来自专栏落花落雨不落叶

canvas画简单电路图

62011
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2772
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2968

扫码关注云+社区