赞
踩
有一面由许多小矩形块拼起来的墙,游戏的玩法就是通过鼠标左键点击发射小圆球,小圆球撞击墙体,使组成墙体的矩形块被冲撞开。
新建项目(这里我是拿Unity 202.3.1的版本)。
给地面一个颜色。
将GroundM材质拖给Ground即可。
由于墙体是有多个相同的小矩形拼成的,所以用预制体(Prefab)来做一个小矩形的模板,然后其他的小矩形根据这个模板来生成也就是实例化。
同样的给它一个颜色。
然后再Assets目录下创建一个Prefabs的目录,将Brick拖入Prefabs中去,这样一个预制体就做好了~(可以观察Brick左边的图标是否变蓝来判断预制体是否制作成功)。
然后我们可以选中Brick这个方块,按下Ctrl + D就可以对该预制体进行复制,然后在Scene界面下调整各个方块的摆放位置。
然后给预制体小球加上刚体组件,不然就做不到物理碰撞。
最后做完的样子。
在Scene下用鼠标拖动调制Brick方块的位置时可能会拖动得不精确,这个时候我们可以按住Ctrl再用鼠标拖动就可以根据步长来移动,这个移动的步长也可以进行修改。
同墙体制作差不多,射出的小球都是一样的,所以也要用到预制体。
给小球调整好大小,设置好颜色,然后拖入Prefabs文件夹中即可。
给小球添加刚体组件,不然就不能做物理碰撞。
游戏就如同电影,相机拍到什么,我们才能看到什么。
我们可以通过改变相机的位置角度,从而达到移动视野的目的。
在Assets文件夹下创建一个Scripts文件夹,该文件夹存放我们所有写的Script脚本文件。
这里我们新建一个CameraMove的脚本文件来实现相机的移动。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraMove : MonoBehaviour { public int speed = 1; // 镜头移动速度 public int rotateSpeed = 1; // 镜头随着鼠标移动的速度 // Start is called before the first frame update // 初始化操作 void Start() { } // Update is called once per frame // 每一帧执行的动作 void Update() { float h = Input.GetAxis("Horizontal"); // 得到的是一个-1到1的中间的值(-1,1),h代表的是水平的,v代表的是垂直的 float v = Input.GetAxis("Vertical"); float x = Input.GetAxis("Mouse X") * rotateSpeed; // 获取鼠标在屏幕上的x坐标 float y = Input.GetAxis("Mouse Y") * rotateSpeed; // 获取鼠标在屏幕上的y坐标 transform.Translate(new Vector3(h,v,0) * speed * Time.deltaTime); //当前帧运动的距离,Time.deltaTime表示的是当前帧到当前帧结束所需要的时间 transform.localRotation = transform.localRotation * Quaternion.Euler(-y,x,0); //镜头随着鼠标动 } //private void FixedUpdate 一秒执行50帧动作,每帧执行0.02秒,可以修改 在Edit-> Project Settings-> Time-> FixedTimestep中修改 }
将写好的CameraMove脚本拖给Main Camera,这样我们游戏中的视野就可以动了。
步骤同上面的CameraMove脚本一样。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Shoot : MonoBehaviour { public GameObject BulletPrefab; // Start is called before the first frame update void Start() { // GameObject.Instantiate(BulletPrefab,transform.position,transform.rotation); //实例化一个prefab的一个对象 } // Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)) { GameObject bullet = GameObject.Instantiate(BulletPrefab,transform.position,transform.rotation); // 实例化,实例化的小球的位置跟相机的位置以及角度相同 Rigidbody rd = bullet.GetComponent<Rigidbody>(); // 两种给小球速度的方式,一种是给一个带方向的力,另一种是给一个带方向的速度 // rd.AddForce(Vector3.forward); //给子弹一个向前为1牛顿的力,每一帧给一牛 Ray mouseRay= Camera.main.ScreenPointToRay(Input.mousePosition); // 生成以摄像机为起点经鼠标点位置的射线 rd.velocity = mouseRay.direction * 35; // 设置子弹的速度,这个速度有方向 } } }
将该脚本拖给Main Camera。
同时也要讲预制体Bullet拖给Shoot脚本中对应的属性。
就可以开始射击了,biubiubiu~。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。