>>点击此处返回查看前面的内容

目录

创建一个机器人对象

为机器人建立动画

Right是由Left翻转得到的

逐一修改帧数

创建一个新混合树

添加上下左右四个运动

添加参数

创建机器人控制脚本

冻结旋转

创建预制体

创建雷区

拖动一个素材,重命名为Robot,以

创建一个机器人对象

为机器人建立动画

双击打开

角色拖入


设定帧数率

同理,已有Down,现制作Up,Left和Right

命名技巧:点击上面的文件名,然后稍微修改一下

Right是由Left翻转得到的

所以需要对其进行处理

单独选择该动画是无法添加属性的,必须在对象上进行操作才可以

在动画面板中

逐一修改帧数

删除这四个动画状态

创建一个新混合树

添加上下左右四个运动

添加参数

修改树的类型还有参数

上 Y 1

下 Y -1

左 X -1

右 X 1

创建机器人控制脚本

机器人要有碰撞,所以为机器人添加刚体和碰撞体

刚体里面重力影响取消掉

编辑碰撞盒

继续写脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;public class RobotControl : MonoBehaviour
{public float speed = 3f;//机器人要运动肯定要有一个速度Animator anim;//创建一个动画状态集的变量,用来设定动画状态集的值,利用Animator参数,要决定到底播放左边的动画还是右边的动画Rigidbody2D rbody;//为了防止角色抖动,用刚体的moveposition来确定位置public bool isVertical;//设定一个参数,判断是水平移动还是垂直移动Vector2 moveDirection;//设定一个运动方向的变量float changeTimer;//设定一个计时器,每过一段时间,机器人换一个方向运动public float changeDirectionTime = 2f;//计时器长度// Start is called before the first frame updatevoid Start(){anim = GetComponent<Animator>();//获取动画组件,一会儿要修改它的参数rbody = GetComponent<Rigidbody2D>();//获取2d刚体,一会儿要修改它的位置moveDirection = isVertical ? Vector2.up : Vector2.right;//初始状态下判断运动方向changeTimer = changeDirectionTime;//计时器初始化}// Update is called once per framevoid Update(){changeTimer -= Time.deltaTime;//计时器每一帧都减小if(changeTimer<0){moveDirection *= -1;//如果小于0,改变方向changeTimer = changeDirectionTime;//改变方向后计时器重新初始化}Vector2 position = rbody.position;//定义一个二维向量位置坐标来获取刚体坐标position.x += moveDirection.x * speed * Time.deltaTime;//改变水平方向位置position.y += moveDirection.y * speed * Time.deltaTime;//改变垂直方向位置rbody.MovePosition(position);//为了防止抖动,调用刚体的moveposition,里面是二维向量的位置//设定动画状态集的参数,把moveDirection的值传递给move X/Yanim.SetFloat("move X", moveDirection.x);anim.SetFloat("move Y", moveDirection.y);}
}

脚本编辑好之后绑定到角色上面

机器人只能原地变换方向,没有位移,好奇怪

错误代码:

不是 moveDirection.x 而是 position.x

moveDirection.x += moveDirection.x * speed * Time.deltaTime;//改变水平方向位置
moveDirection.y += moveDirection.y * speed * Time.deltaTime;//改变垂直方向位置

机器人撞树翻了,然后一直旋转的解决方法

冻结旋转

创建预制体

先建一个,再以它再建一个变体,调整一下方向,这样就有两个方向的怪

创建雷区

先把这两个机器人藏起来

现在就是要让玩家踩到雷区,然后让两个怪再出来

创建

把预制体文件夹放进去

编辑 PlayerControl.cs 脚本

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;public class PlayerControl : MonoBehaviour
{public float speed = 8f;Rigidbody2D rbody;//定义2d刚体Animator anim;//定义动画Vector2 lookDirection = new Vector2(1, 0);//初始向x看GameObject robotObj;//定义一个机器人对象// Start is called before the first frame updatevoid Start(){rbody = GetComponent<Rigidbody2D>();//获取2d刚体anim = GetComponent<Animator>();//获取动画组件}// Update is called once per framevoid Update(){float moveX = Input.GetAxisRaw("Horizontal");float moveY = Input.GetAxisRaw("Vertical");Vector2 moveVector = new Vector2(moveX, moveY);if(moveX!=0||moveY!=0){lookDirection = moveVector;}Vector2 position = transform.position;position.x += moveX * speed * Time.deltaTime;position.y += moveY * speed * Time.deltaTime;transform.position = new Vector2(position.x, position.y);rbody.MovePosition(position);//用刚体移动可以消除画面抖动anim.SetFloat("move X",lookDirection.x);//为动画集赋值anim.SetFloat("move Y",lookDirection.y);anim.SetFloat("runspeed", moveVector.magnitude);//状态集的切换由运动矢量决定//赋值必须与状态集命名一样}private void OnTriggerEnter2D(Collider2D collision){float robotX = Random.Range(-3, 5);float robotY = Random.Range(-3, 5);Vector2 position_robot = new Vector2(robotX, robotY);if(collision.gameObject.tag=="bomb")//如果碰到雷区{print("other.tag=" + collision.gameObject.tag);//这句一定要有,不然出不来robotObj = Instantiate(Resources.Load("Prefabs/Robot"),position_robot,Quaternion.identity)as GameObject;//加载资源,生成一个预制体,做成一个对象}}private void OnTriggerExit2D(Collider2D collision){if(collision.gameObject.tag=="bomb"){Destroy(robotObj);}}
}

复制路径

预制体路径
Assets / Resources / Prefabs / Robot.prefab
robotObj=Instantiate(Resources.Load(""))//加载资源用预制体克隆一个对象
>>删去不必要的路径
robotObj = Instantiate(Resources.Load("Assets / Resources / Prefabs / Robot.prefab"));
>>
robotObj = Instantiate(Resources.Load("Prefabs / Robot"));
>>填写其他参数,如随机生成的位置,还有方向,去掉空格
robotObj = Instantiate(Resources.Load("Prefabs/Robot"),position_robot,Quaternion.identity)as GameObject;

若路径不对会有如下报错

The Object you want to instantiate is null.

为雷区对象设定标签bomb

为雷区添加碰撞体

并指定为触发器

效果:

如果从雷区里出来了,就把机器人销毁掉

    private void OnTriggerExit2D(Collider2D collision){if(collision.gameObject.tag=="bomb"){Destroy(robotObj);}}

(完)

Unity 2d 雷区与小怪的生成相关推荐

  1. Unity 2d自动寻路 小怪追人

    首先要导入一个包 Unity 2D寻路插件 >>点此下载 一.寻路网格的生成 先搭建好场景 在搭建好的场景中新建一个空物体 点击 AddComponent 搜索 Pathfinder 添加 ...

  2. Unity 2D游戏开发教程之为游戏场景添加多个地面

    Unity 2D游戏开发教程之为游戏场景添加多个地面 为游戏场景添加多个地面 显然,只有一个地面的游戏场景太小了,根本不够精灵四处活动的.那么,本节就来介绍一种简单的方法,可以为游戏场景添加多个地面. ...

  3. Unity 2D游戏开发快速入门(内部资料)

    Unity 2D游戏开发快速入门(内部资料) 试读样张:http://pan.baidu.com/s/1hqh5oqw Unity 2D游戏开发快速入门4 前  言 Unity是一款综合的游戏开发工具 ...

  4. Unity 2D教程: 滚动,场景和音效

    http://www.tairan.com/archives/7074 原文地址:http://www.raywenderlich.com/71029/unity-4-3-2d-tutorial-sc ...

  5. Unity 2D骨骼动画2:创建真实动画

    http://bbs.9ria.com/thread-401781-1-1.html 在这个系列,我们将关注Unity引擎提供的基于骨骼动画工具.它的主要思想是为了把它应用到你自己的游戏来介绍和教基本 ...

  6. Unity 2D光照(2D Light)和阴影(Shadow Caster 2D)

    前言 在上一篇我们简单了了解了Unity 2D动画的实现,在这一篇中,我们来学一下Unity的2D Light,给我们的2D动画添加上光照效果,简单的效果图如下: 首先先分享一个B站上别人翻译了的视频 ...

  7. UNITY 2D入门基础教程 (一)

    如果用以前版本的Unity做2D游戏,虽然能做,但是要费很多周折. 比如你可以将一张纹理赋予一个"面片"网格,然后用脚本控制它的动画调整它的位移.如果你要使用物理引擎,那么还要将这 ...

  8. 【Unity】Unity 2D游戏开发(一)U2D基础功能

    文章目录 Unity 2D游戏开发基础知识 Animation动画 SortingLayer层排序 Physics 2D物理2D Rigidbody 2D刚体 示例 1.点击鼠标发出子弹 2.子弹打中 ...

  9. 《Unity 2D与3D手机游戏开发实战》简介

    #好书推荐##好书奇遇季#<Unity 2D与3D手机游戏开发实战>,京东当当天猫都有发售.彩色印制,定价89元,网店打折销售更便宜.本书配套源码.PPT课件,适合Unity游戏开发初学者 ...

最新文章

  1. [LeetCode] Binary Tree Postorder Traversal 二叉树的后序遍历
  2. python延迟5s_Python做扫描,发包速度实在是太慢了,有优化的方案吗?
  3. javascript学习系列(20):数组中的bind,apply,call
  4. 瞎扯数学分析-微积分
  5. JavaScript基础知识必知!
  6. c++ 中文 base64加密_这次有点骚了,破解安卓某 APP 低层加密
  7. Python多进程(process)和多线程(thread)的区别
  8. java—将数据库读取的list转tree
  9. NYOJ 81:炮兵阵地(状压DP)
  10. ADFS3.0 Customizing the AD FS Sign-in Pages
  11. js href的用法
  12. 设计模式(8)——外观模式
  13. 服务器2012能安装无线网卡,网件无线网卡在windows 2012支持问题
  14. 系统架构师论文-论新技术的引进
  15. 个人创建微信公众号步骤
  16. 符号_变压器电路图符号大全
  17. 用凯利公式玩转炒股,一文全懂
  18. Spring data报错:Inferred type 'S' for type parameter 'S' is not within its bound;
  19. Java使用三层架构、JDBC连接数据库完成《试题信息管理系统》
  20. iOS-音频 + 视频

热门文章

  1. RPG游戏角色属性简单的设置C++
  2. Mariadb数据库集群设计实验
  3. Tomcat8080、80、8443、443端口及对应http、https协议详解
  4. C++中sstream类
  5. Qt movetoThread关闭线程
  6. JFlow与CCBPM的对比
  7. JVM常见4种GC算法
  8. EPSON EX3打印机清零
  9. 计算方法 - 二分法求近似根
  10. Mockito教程一