博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3D 物体运动小游戏后续
阅读量:5890 次
发布时间:2019-06-19

本文共 4462 字,大约阅读时间需要 14 分钟。

上篇链接:

目录



一、写入player方块的初始位置

打开unity3d,然后打开playermove的C#脚本。

 playermove的代码:

public class playermove : MonoBehaviour {        public float moveSpeed; //移速    private float maxSpeed=15;  //最高速度的限制    private Vector3 initialPosition;   //定义初始位置	// Use this for initialization	void Start () {        initialPosition = transform.position;  //一开始player的位置    }		// Update is called once per frame	void Update () {        //获取键盘数值        //var 自动匹配目标类型        var move = new Vector3(Input.GetAxisRaw("Horizontal"),0,Input.GetAxisRaw("Vertical")); //构建一个向量,获取X,Y,Z三轴的变量        var rigidbody = GetComponent
(); if (rigidbody.velocity.magnitude < maxSpeed) //移动向量的值小于最高移速限制 { rigidbody.AddForce(move * moveSpeed); //给刚体添加一个力 } if (transform.position.y<-2) //如果y轴的位置下降到-2 { transform.position = initialPosition; //player的位置返回初始位置 } }}

二、设置敌人与player的碰撞检测

点击enemy,在Inspector中选择Tag(标签)--Add Tag(添加标签)  

注意:需要player运动时碰撞才有效。

添加标签名为Enemy。 然后重新选择enemy元件,在Tag中会出现刚刚新加的标签。

player代码如下:

public class playermove : MonoBehaviour {        public float moveSpeed; //移速    private float maxSpeed=15;  //最高速度的限制    private Vector3 initialPosition;   //定义初始位置	// Use this for initialization	void Start () {        initialPosition = transform.position;  //一开始player的位置    }		// Update is called once per frame	void Update () {        //获取键盘数值        //var 自动匹配目标类型        var move = new Vector3(Input.GetAxisRaw("Horizontal"),0,Input.GetAxisRaw("Vertical")); //构建一个向量,获取X,Y,Z三轴的变量        var rigidbody = GetComponent
(); if (rigidbody.velocity.magnitude < maxSpeed) //移动向量的值小于最高移速限制 { rigidbody.AddForce(move * moveSpeed); //给刚体添加一个力 } if (transform.position.y<-2) //如果y轴的位置下降到-2 { die(); //player的位置返回初始位置 } } void OnCollisionStay(Collision other) { if (other.gameObject.tag== "Enemy") { die(); //player的位置返回初始位置 } } void die() { transform.position = initialPosition; //player的位置返回初始位置 }}

三、加入粒子系统

点击Open Editor,对粒子系统进行设置,将Looping的勾取消,再设置Start Size的大小范围。在project中新建一个文件夹Pretabs,然后在把Particle System移动到文件夹Pretabs当中。

之后可以将Particle System从Hierarchy中删除,点击player,将文件夹Pretabs中的Particle System移动到Playermove(Script)中的Death Effect后面的文本框中。然后运行即可。

player代码:

public class playermove : MonoBehaviour {        public float moveSpeed; //移速    private float maxSpeed=15;  //最高速度的限制    private Vector3 initialPosition;   //定义初始位置    public GameObject deathEffect;   //死亡特效	// Use this for initialization	void Start () {        initialPosition = transform.position;  //一开始player的位置    }		// Update is called once per frame	void Update () {        //获取键盘数值        //var 自动匹配目标类型        var move = new Vector3(Input.GetAxisRaw("Horizontal"),0,Input.GetAxisRaw("Vertical")); //构建一个向量,获取X,Y,Z三轴的变量        var rigidbody = GetComponent
(); if (rigidbody.velocity.magnitude < maxSpeed) //移动向量的值小于最高移速限制 { rigidbody.AddForce(move * moveSpeed); //给刚体添加一个力 } if (transform.position.y<-2) //如果y轴的位置下降到-2 { die(); //player的位置返回初始位置 } } void OnCollisionStay(Collision other) { if (other.gameObject.tag== "Enemy") { die(); //player的位置返回初始位置 } } void die() { Instantiate(deathEffect,transform.position,Quaternion.identity); //死亡效果 transform.position = initialPosition; //player的位置返回初始位置 }}

四、设置围墙

创建一个新的方块Cube,重命名为Wall。新建一个空盒子,命名为Walls,把上面的wall元件都拖动到Walls中。

五、设置目标goal

新建一个方块Goal,修改颜色,把方块拖动到你设置的目标到达位置。

新建一个脚本文件,命名为GameCenter.

之后将GameCenter的代码编辑如下:

public class GameCenter : MonoBehaviour {    public static int currentLevel = 0;  //默认设置关卡数为0    public static void CompleteLevel()  //完成当前关卡    {        Application.LoadLevel(currentLevel);    }	}

接下来需要在playermove脚本中考虑是否碰撞。在unity界面选择Goal元件,在Inspector中勾选触发器Is Trigger。

然后新增Goal元件的标签,将标签命名为Goal,修改Tag的值为Goal

然后在playermove脚本中添加一个新的方法。

void OnTriggerStay(Collider other)  //碰撞判断    {        if (other.gameObject.tag == "Goal")        {            GameCenter.currentLevel++;  //GameCenter的currentLevel值自增            GameCenter.CompleteLevel(); //调用GameCenter的CompleteLevel()方法        }    }

把场景加入, 选择File--Build Settings--Add Current

创建第二个场景,在Project中选择demo01,按CTRL+D,会自动拷贝一份demo01场景,命名为demo02。

可以对demo02进行场景元件位置的修改

同样将demo02加入

接下来运行时就成功了,自己可以对场景进行美化加工!

参考实例:

转载地址:http://cggix.baihongyu.com/

你可能感兴趣的文章
往sde中导入要素类报错000732
查看>>
sql基本运算
查看>>
cxf 整合 spring 时 java.lang.VerifyError异常
查看>>
javascript中工厂模式
查看>>
MFC GetDlgItemText 失败
查看>>
NSString NSMutableString
查看>>
个人练习集锦
查看>>
log4net 将日志写入数据库
查看>>
springboot之启动方式
查看>>
初次安装git配置用户名和邮箱及密钥
查看>>
微服务架构盛行的时代,你需要了解点 Spring Boot
查看>>
6.1(续)索引、索引组织表--Oracle模式对象
查看>>
工作5年左右的程序员如何在职业瓶颈期内快速提升自己的身价?提升后如何有效变现自己的高质量技能?...
查看>>
动画 球
查看>>
C++中的堆,栈,静态内存区,常量区
查看>>
动态SQL实现与注意事项(有返回值与无返回值动态SQL 实现)
查看>>
java struts2 debug
查看>>
解析 PHP 中 session 的实现原理以及大网站应用应该注意的问题
查看>>
[转].net mvc + vuejs 的项目结构
查看>>
Centos7安装Redis
查看>>