您的位置:首页 > 其它

泰课在线零基础高级篇最后案例的完成笔记

2020-06-26 11:53 127 查看

案例制作

涉及到的内容

1.对color的赋值

2.改变随机颜色

3.For循环语句

4.重力

步骤

1.建立一个脚本,命名Main,并绑定到Main Camera的属性面板上

2.建立地面:1)创建一个正方体,并将其拖拽至项目中,这样就生成了预制物体;2)再将创建的正方体删除,这样只保留预制物体;

3)在脚本中使用for语句进行测试,代码如下:

void Start()

    {

        for(int i=0;i<=9;i++)

        {

            print(i);

        }

}

4)使用代码创建地面,首先创建一个公共变量,Groundpublic GameObject Ground;

再在属性面板中将Cube这一预制物体放到属性Ground上,如图:

代码展示

void Start()

    {

        for(int i=0;i<=9;i++)

        {

            GameObject one = Instantiate(Ground) as GameObject;//此时在unity中点击开始播放会出现10个预制体方块,但是并不会平铺

        }

    }

5)此时点击播放生成一排地图,将X轴上铺满,代码如下:

void Start()

    {

        Vector3 Position;//申请变量,因为制作的是3D的内容,所有模式选择vector3,名字大写,以免和变量发生冲突

        for(int i=0;i<=9;i++)

        {

            GameObject one = Instantiate(Ground) as GameObject;//此时在unity中点击开始播放会出现10个预制体方块,但是并不会平铺

            Position = new Vector3(i,0,0);//实例化物体,使其坐标等于i,0,0

            one.transform.position = Position;

        }

    }

6)生成地面的Z轴内容,代码展示如下:

void Start()

    {

        Vector3 Position;//申请变量,因为制作的是3D的内容,所有模式选择vector3,名字大写,以免和变量发生冲突

        for(int i=0;i<=9;i++)

        {

            for(int a=0;a <=9;a++)//在X轴的i进行循环的过程中,内部的a数值也进行循环,切记要将坐标中的Z轴中的0改为a

            {

                GameObject one = Instantiate(Ground) as GameObject;//此时在unity中点击开始播放会出现10个预制体方块,但是并不会平铺

                Position = new Vector3(i, 0, a);//实例化物体,使其坐标等于i,0,0;此时是改变的X轴坐标

                one.transform.position = Position;

            }

           

        }

    }

完整代码展示如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class Main : MonoBehaviour

 

{

public GameObject Ground;

    void Start()

    {

        Vector3 Position;//申请变量,因为制作的是3D的内容,所有模式选择vector3,名字大写,以免和变量发生冲突

        for (int i = 0; i <= 9; i++)

        {

            for (int a = 0; a <= 9; a++)//在X轴的i进行循环的过程中,内部的a数值也进行循环,切记要将坐标中的Z轴中的0改为a

            {

                GameObject one = Instantiate(Ground) as GameObject;//此时在unity中点击开始播放会出现10个预制体方块,但是并不会平铺

                Position = new Vector3(i, 0, a);//实例化物体,使其坐标等于i,0,0;此时是改变的X轴坐标

                one.transform.position = Position;

            }

 

        }

    }

 

 

    void Update()

    {

       

    }

}

3.制作球滚动的效果

1)创建一个球:修改位置为(0,0,0

2)将摄像机拖拽至能产生一个俯视的效果(放到和球的xz轴数值一样的地方,将X轴的角度旋转90度即可),点击播放可以看到球和生成的地面,将球放在中心点的位置(可以在播放状态下移动并记住坐标)

3)在球上加上刚体组件,使它产生重力效果,这时点击播放会有球下落的效果

4)球滚动的效果制作,创建一个脚本,命名为Move,代码展示如下:

public class Move : MonoBehaviour

{

    Rigidbody R;

    public int Velocity = 1;//控制按键时产生的力的大小,需要在if语句中乘以这一被赋值的字符

    void Start()

    {

        R = transform.GetComponent<Rigidbody>();//获得组件

    }

 

    void Update()

    {

        if (Input .GetKey (KeyCode.W))

        {

            R.AddForce(new Vector3(0, 0, Velocity));//当按下w键时,会给小球一个向前的力

            //如果是5.3以上的版本使用 R.AddForce(Vector3.back/forward/left/right* Velocity);

            //左侧: new Vector3(Velocity,0,0)

            //右侧: new Vector3(-Velocity,0,0)

            //前:   new Vector3(0,0,Velocity)

            //后:   new Vector3(0,0,-Velocity)

        }

        if (Input.GetKey(KeyCode.S))

        {

            R.AddForce(new Vector3(0, 0, -Velocity));

        }

        if (Input.GetKey(KeyCode.A))

        {

            R.AddForce(new Vector3(Velocity, 0, 0));

        }

        if (Input.GetKey(KeyCode.D))

        {

            R.AddForce(new Vector3(-Velocity, 0, 0));

        }

    }

}

如果觉得速度不够,可以直接在属性面板中进行修改

6)为球设置一个新的颜色,可以获得更好的对比效果,创建生成材质球即可,设置完成后拖拽至Sphere上即可。

7)当球碰撞到地面后发生颜色变化

创建一个颜色数组

完成碰撞代码

完整代码展示如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class Move : MonoBehaviour

{

    Rigidbody R;

    public int Velocity = 1;//控制按键时产生的力的大小,需要在if语句中乘以这一被赋值的字符

    public Color[] colorful = new Color[7];//设置颜色数组,共设置七种颜色

    void Start()

    {

        R = transform.GetComponent<Rigidbody>();//获得组件

    }

 

    void Update()

    {

        if (Input .GetKey (KeyCode.W))

        {

            R.AddForce(new Vector3(0, 0, Velocity));//当按下w键时,会给小球一个向前的力

            //如果是5.3以上的版本使用 R.AddForce(Vector3.back/forward/left/right* Velocity);

            //左侧: new Vector3(Velocity,0,0)

            //右侧: new Vector3(-Velocity,0,0)

            //前:   new Vector3(0,0,Velocity)

            //后:   new Vector3(0,0,-Velocity)

        }

        if (Input.GetKey(KeyCode.S))

        {

            R.AddForce(new Vector3(0, 0, -Velocity));

        }

        if (Input.GetKey(KeyCode.A))

        {

            R.AddForce(new Vector3(Velocity, 0, 0));

        }

        if (Input.GetKey(KeyCode.D))

        {

            R.AddForce(new Vector3(-Velocity, 0, 0));

        }

    }

    private void OnCollisionEnter(Collision other )

    {

        //print("a");检测碰撞时是否会产生相应的变化,是否会生成一个a

        //other.gameObject.GetComponent<Renderer>().material.color = colorful[0];此时当球撞击到地面时,就会将涉及到的地方变成红色

        int i;

        i = Random.Range(0,7);//此时i的数值会变成一个随机数

        other.gameObject.GetComponent<Renderer>().material.color = colorful[i];//此时就会发生当球撞击地面时会发生随机颜色的变化

    }

}

4.拖尾效果的制作:当走到边缘格子的时候给一个反方向的力,这样可以防止小球掉下去

1)调整摄像机为正交视图,方便调整相机和小球的位置,这样可以直接调整Size以调整大小

2)创建一个新的脚本,命名为Hit(碰撞)效果没实现!!!!

代码展示如下

public class Hit : MonoBehaviour

{

    GameObject Object;

    Rigidbody R;

    public int Velocity;

    void Start()

    {

        Object = GameObject.Find("One");

        R = Object.GetComponent<Rigidbody>();

    }

 

    void Update()

    {

        if (Object.transform.position.x>9)

            {

            R.AddForce(new Vector3(-Velocity, 0, 0));

        }

        if (Object.transform.position.x < 0)

        {

            R.AddForce(new Vector3(Velocity, 0, 0));

        }

        if (Object.transform.position.z < 0)

        {

            R.AddForce(new Vector3(0, 0, Velocity));

        }

        if (Object.transform.position.z > 9)

        {

            R.AddForce(new Vector3(0, 0, -Velocity));

        }//但是效果未实现

    }

}

3)实现拖尾效果

创建材质球,将时间改为3秒,在材质球界面进行拖尾效果的改变。

5.改变球的颜色

从第二秒开始,每隔两秒球自身的颜色发生一次转变,延迟调用

完整代码展示如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class Move : MonoBehaviour

{

    Rigidbody R;

    public int Velocity = 1;//控制按键时产生的力的大小,需要在if语句中乘以这一被赋值的字符

    public Color[] colorful = new Color[7];//设置颜色数组,共设置七种颜色

    void Start()

    {

        InvokeRepeating("TurnColor", 2, 2);//从第二秒开始,每隔两秒钟进行一次颜色的改变

        R = transform.GetComponent<Rigidbody>();//获得组件

    }

 

    void Update()

    {

        if (Input.GetKey(KeyCode.W))

        {

            R.AddForce(new Vector3(0, 0, Velocity));//当按下w键时,会给小球一个向前的力

            //如果是5.3以上的版本使用 R.AddForce(Vector3.back/forward/left/right* Velocity);

            //左侧: new Vector3(Velocity,0,0)

            //右侧: new Vector3(-Velocity,0,0)

            //前:   new Vector3(0,0,Velocity)

            //后:   new Vector3(0,0,-Velocity)

        }

        if (Input.GetKey(KeyCode.S))

        {

            R.AddForce(new Vector3(0, 0, -Velocity));

        }

        if (Input.GetKey(KeyCode.A))

        {

            R.AddForce(new Vector3(Velocity, 0, 0));

        }

        if (Input.GetKey(KeyCode.D))

        {

            R.AddForce(new Vector3(-Velocity, 0, 0));

        }

    }

    void OnCollisionEnter(Collision other)

    {

        //print("a");检测碰撞时是否会产生相应的变化,是否会生成一个a

        //other.gameObject.GetComponent<Renderer>().material.color = colorful[0];此时当球撞击到地面时,就会将涉及到的地方变成红色

        int i;

        i = Random.Range(0, 7);//此时i的数值会变成一个随机数

        other.gameObject.GetComponent<Renderer>().material.color = colorful[i];//此时就会发生当球撞击地面时会发生随机颜色的变化

    }

    void TurnColor()

    {

        int a;

        a = Random.Range(0, 7);

        transform.GetComponent<Renderer>().material.color = colorful[a];//此时每隔两秒钟改变球体自身的颜色

    }

}

6.声音组件的建立

1)在摄像机旁边创建一个空物体AudioManage+创建一个Music脚本来控制,将代码绑定到AudioManage上,将声音文件放在合适的位置上。将两个声音文件做成原件可以在别的脚本中进行调用。

完整代码展示如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class Music : MonoBehaviour

{

    public AudioClip clip1;

    public AudioClip clip2;//在AudioClip后不能添加数字,这是数据类型

    AudioSource AudioMusic;//找到这些音乐文件对应的组件,然后进行获取

    void Start()

    {

        AudioMusic = this.transform.GetComponent<AudioSource>();

    }

 

    void Update()

    {

       

    }

    public void music1()

    {

        AudioMusic.clip = clip1;

        AudioMusic.Play();

    }

    public void music2()//因为需要在别的脚本中调用,所以要注意改为公共变量,上同

    {

        AudioMusic.clip = clip2;

        AudioMusic.Play();

    }//这样将两个音乐做成了两个原件,可以在别的脚本中对其进行调用

}

(2)在Audio的属性面板中添加Audio Source以调整相关属性,要将开始播放关闭(play on awake)

(3)在Move中和Hit中调用音乐原件即可,部分代码展示如下:

Move中

  void TurnColor()

    {

        GameObject.Find("AudioManager").GetComponent<Music>().music1();//当小球颜色转换时,发出第一个声音

        int a;

        a = Random.Range(0, 7);

        transform.GetComponent<Renderer>().material.color = colorful[a];//此时每隔两秒钟改变球体自身的颜色

    }

Hit中(四个都写上)

if (Object.transform.position.x > 9)

        {

            R.AddForce(new Vector3(-Velocity, 0, 0));

            GameObject.Find("AudioManager").GetComponent<Music>().music2();

        }

7写脚本完成ESC退出游戏!!!!!!!!否则根本关不掉

创建一个新的脚本命名为SceneTurn,完成代码后一定要将脚本绑定在Main Camera上!!

代码展示如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class SceneTurn : MonoBehaviour

{

    void Start()

    {

       

    }

 

    void Update()

    {

        if (Input .GetKey(KeyCode.Escape))

        {

            Application.Quit();

        }

    }

}

8.发布游戏

File>Build Setting>Add Open Scene>Build

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐