案例制作

涉及到的内容

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

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

  1. MySQL学习笔记(B站网课:MySQL_基础+高级篇- 数据库 -sql -mysql教程_mysql视频_mysql入门_尚硅谷)已完结

    目录 一.为什么要学习数据库 二.数据库的相关概念 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍和安装 MySQL服务的启动和停止 MySQL服务的登录和退出 MySQL的常见命 ...

  2. 泰课在线选择DRM-X 4.0加密保护其高品质IT课程

    泰课在线以移动应用开发.游戏开发课程为核心,主要面向立志投身互联网技术开发的朋友,或者以自我提升或就业为目标的求学人员.通过优质的视频课程.直播教学.网络组队项目实战.网络班级管理.线上教学社区等教学 ...

  3. Unity3D泰课在线 ARPG 课程《泰斗破坏神》系列视频教程附素...

    泰课在线 Unity3d史诗 MMO ARPG 课程<泰斗破坏神>,精心设计将包含200+课时,由视频课时+直播课时+测试课时混合组成. 本年度泰课最重头unity3d ARGP课程,完整 ...

  4. 站长在线零基础Python完全自学教程18:Python中的集合完全解读

    欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第18课< Python中的集合完全解读>.本节课是一个大课,我分了这些知识 ...

  5. 〖Python零基础入门篇㉟〗- 私有函数、私有变量及封装

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  6. 〖Python零基础入门篇(55)〗- yaml文件的读取

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  7. 〖Python零基础入门篇㊲〗- 类的继承、多态与多重继承

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  8. 〖Python零基础入门篇(63)〗 - 持久化学生信息库的完善

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  9. 〖Python零基础入门篇(64)〗- 小案例 - 猜拳游戏与数字猜猜猜

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

最新文章

  1. 简单粗暴告诉你什么是区块链
  2. 计算机控制实验教程,新)《计算机控制技术》实验教程.doc
  3. django 通过数据库表名获取app名
  4. Win7x64中使用VS调试WEB项目报“ORA-06413: 连接未打开”错误解决方法
  5. 数据库阻塞---SQL的隔离级别
  6. junit的使用说明
  7. 【渝粤教育】 国家开放大学2020年春季 1079高等代数专题研究 参考试题
  8. centos中nodejs npm环境完全删除
  9. 怎么升级计算机硬盘,研究僧 篇一:记一次老电脑的升级之路
  10. 嵌入式实时操作系统Ucos3
  11. 推荐几个我目前在用的简历制作工具
  12. 【作业报告】作业5 四则运算 测试与封装 5.2(已更新)
  13. MP3转换器下载 - 通用mp3转换器
  14. 【书籍学习】MATLAB书籍\【chinapub】matlab教程一套电子书
  15. 电脑小问题四:知网CAJ格式转下载PDF格式
  16. Cboard框架搭建及使用
  17. C++入门项目必练100题
  18. 高中3年,3500个词汇带音标,归成“图表”
  19. blackscholes matlab,基于MATLAB的Black-Scholes-Merton欧式期权定价模型的计算研究
  20. stimulsoft入门教程:报表与页面上的图表(一)

热门文章

  1. 精妙绝伦的jQuery——改进导航:菜单、标签及折叠选项
  2. Ubuntu安装软件包网络不可达问题
  3. 云计算的“傲慢”与“偏见”
  4. Matlab读取和写入excel表格文件
  5. linux装入归档文件时,装入归档文件时发生了错误!!怎么解决?
  6. loT技术(BT/WFI/ZIGBEE/MESH)
  7. html出现403错误信息,HTTP 403 错误是什么意思
  8. DFS(Depth First Search,深度优先搜索)与BFS(Breadth First Search,广度优先搜索)总结与思考
  9. (四)万能的搜索 —— 3. 广度优先搜索
  10. 国内的博客没几个能用,blogbus的功能和技术看来是不错的