泰课在线零基础高级篇最后案例的完成笔记
案例制作
涉及到的内容
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)使用代码创建地面,首先创建一个公共变量,Ground,public 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)将摄像机拖拽至能产生一个俯视的效果(放到和球的x、z轴数值一样的地方,将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
泰课在线零基础高级篇最后案例的完成笔记相关推荐
- MySQL学习笔记(B站网课:MySQL_基础+高级篇- 数据库 -sql -mysql教程_mysql视频_mysql入门_尚硅谷)已完结
目录 一.为什么要学习数据库 二.数据库的相关概念 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍和安装 MySQL服务的启动和停止 MySQL服务的登录和退出 MySQL的常见命 ...
- 泰课在线选择DRM-X 4.0加密保护其高品质IT课程
泰课在线以移动应用开发.游戏开发课程为核心,主要面向立志投身互联网技术开发的朋友,或者以自我提升或就业为目标的求学人员.通过优质的视频课程.直播教学.网络组队项目实战.网络班级管理.线上教学社区等教学 ...
- Unity3D泰课在线 ARPG 课程《泰斗破坏神》系列视频教程附素...
泰课在线 Unity3d史诗 MMO ARPG 课程<泰斗破坏神>,精心设计将包含200+课时,由视频课时+直播课时+测试课时混合组成. 本年度泰课最重头unity3d ARGP课程,完整 ...
- 站长在线零基础Python完全自学教程18:Python中的集合完全解读
欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第18课< Python中的集合完全解读>.本节课是一个大课,我分了这些知识 ...
- 〖Python零基础入门篇㉟〗- 私有函数、私有变量及封装
订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...
- 〖Python零基础入门篇(55)〗- yaml文件的读取
订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...
- 〖Python零基础入门篇㊲〗- 类的继承、多态与多重继承
订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...
- 〖Python零基础入门篇(63)〗 - 持久化学生信息库的完善
订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...
- 〖Python零基础入门篇(64)〗- 小案例 - 猜拳游戏与数字猜猜猜
订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...
最新文章
- 简单粗暴告诉你什么是区块链
- 计算机控制实验教程,新)《计算机控制技术》实验教程.doc
- django 通过数据库表名获取app名
- Win7x64中使用VS调试WEB项目报“ORA-06413: 连接未打开”错误解决方法
- 数据库阻塞---SQL的隔离级别
- junit的使用说明
- 【渝粤教育】 国家开放大学2020年春季 1079高等代数专题研究 参考试题
- centos中nodejs npm环境完全删除
- 怎么升级计算机硬盘,研究僧 篇一:记一次老电脑的升级之路
- 嵌入式实时操作系统Ucos3
- 推荐几个我目前在用的简历制作工具
- 【作业报告】作业5 四则运算 测试与封装 5.2(已更新)
- MP3转换器下载 - 通用mp3转换器
- 【书籍学习】MATLAB书籍\【chinapub】matlab教程一套电子书
- 电脑小问题四:知网CAJ格式转下载PDF格式
- Cboard框架搭建及使用
- C++入门项目必练100题
- 高中3年,3500个词汇带音标,归成“图表”
- blackscholes matlab,基于MATLAB的Black-Scholes-Merton欧式期权定价模型的计算研究
- stimulsoft入门教程:报表与页面上的图表(一)
热门文章
- 精妙绝伦的jQuery——改进导航:菜单、标签及折叠选项
- Ubuntu安装软件包网络不可达问题
- 云计算的“傲慢”与“偏见”
- Matlab读取和写入excel表格文件
- linux装入归档文件时,装入归档文件时发生了错误!!怎么解决?
- loT技术(BT/WFI/ZIGBEE/MESH)
- html出现403错误信息,HTTP 403 错误是什么意思
- DFS(Depth First Search,深度优先搜索)与BFS(Breadth First Search,广度优先搜索)总结与思考
- (四)万能的搜索 —— 3. 广度优先搜索
- 国内的博客没几个能用,blogbus的功能和技术看来是不错的