2d平台怪物逻辑
2d来回巡逻
遇到坑会自动转向
可配置单次方向行走的时间,转向等待时间等
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Serialization; [RequireComponent(typeof(Rigidbody2D))]
public class AI2dPatrol : MonoBehaviour
{
public Rigidbody2D body2D;
public Transform rayPoint;//射线发射点
public float rayLength = ;//射线长度
public float speed = ;//怪物速度
public int turnWaitTime;//转向时间
public float oneTime;//走一个方向的时间
public bool autoTurn = true;//遇坑自动转向 private float nowTime = ;
private int moveDir = ;//移动方向 1为左
public Vector3 curSpeed;
private bool isPause = false; private void FixedUpdate()
{
if (isPause)
{
return;
} Move();
if (oneTime > )
{
if (nowTime >= oneTime)
{
nowTime = ;
TurnFace();
}
nowTime += Time.deltaTime;
}
if (autoTurn)
{
RaycastHit2D groundInfo = Physics2D.Raycast(rayPoint.position, Vector2.down, rayLength);
if (groundInfo.collider == false)
{
TurnFace();
}
//scene模式下显示射线
Debug.DrawRay(rayPoint.position, Vector2.down * rayLength, Color.blue);
}
} //转向
async void TurnFace()
{
isPause = true;
await Task.Delay(turnWaitTime * );
moveDir = -moveDir;
var origin = transform.localScale;
transform.localScale = new Vector3(-origin.x, origin.y, origin.z);
isPause = false;
} //移动
void Move()
{
//transform.Translate(Vector2.left * speed * Time.deltaTime * moveDir);
Vector3 targetVelocity = new Vector2(-moveDir * speed, body2D.velocity.y);
body2D.velocity = Vector3.SmoothDamp(body2D.velocity, targetVelocity, ref curSpeed, 0.1f);
}
}
2d平台怪物逻辑的更多相关文章
- HTML5 2D平台游戏开发#6地图绘制
此前已经完成了一部分角色的动作,现在还缺少可以交互的地图让游戏看起来能玩.不过在开始之前应当考虑清楚使用什么类型的地图,就2D平台游戏来说,一般有两种类型的地图,Tile-based和Art-base ...
- HTML5 2D平台游戏开发#4状态机
在实现了<HTML5 2D平台游戏开发——角色动作篇之冲刺>之后,我发现随着角色动作的增加,代码中的逻辑判断越来越多,铺天盖地的if() else()语句实在让我捉襟见肘: 这还仅仅是角色 ...
- HTML5 2D平台游戏开发#5攻击
目前为止,角色除了基本的移动外还什么都不能做,于是我打算先实现角色的攻击动画.角色的普通攻击一共可以分为三个阶段: 一段斩 二段斩 三段斩 移动攻击 跳跃攻击 触发方式为角色站立时按下J(攻击)键,角 ...
- HTML5 2D平台游戏开发#11斜坡物理
在游戏中会经常遇到斜坡地形,比如众所周知的魂斗罗,角色可以在坡上移动和跳跃: 斜坡在2D游戏中很常见,处理起来也较为棘手.最初我打算用分离轴定律来实现,在建立了一个物理模型之后: 发现上坡时没什么问题 ...
- HTML5 2D平台游戏开发#8指令技
一般在动作游戏中,玩家可以通过对输入设备输入一系列的指令让角色完成某个或多个特定的动作.以格斗游戏<拳皇>为例,键入↓↘→↘↓↙← + A or C可以触发IORI的必杀技八稚女: 通过一 ...
- HTML5 2D平台游戏开发#7Camera
在庞大的游戏世界中,玩家不能一览地图全貌,而是只能看到其中一部分,并一步步探索,这时就要用到一种技术来显示局部的地图,游戏术语称为摄像机(Camera).下面两张图中的白色矩形框表示了Camera的作 ...
- HTML5 2D平台游戏开发#1
在Web领域通常会用到一组sprite来展示动画,这类动画从开始到结束往往不会有用户参与,即用户很少会用控制器(例如鼠标.键盘.手柄.操作杆等输入设备)进行操作.但在游戏领域,sprite动画与控制器 ...
- web 单一平台登录逻辑
单点登录逻辑token=cookie('login_token');serverToken=get(token);if(serverToken!='注销'){ set('userid_已登录token ...
- (转载)TRS内容管理平台用户注册逻辑漏洞
首先 site:gov.cn inurl:WCM TRS 的内容管理系统是国内政府网站使用最多的系统之一 如上面所说:外交部 http://wcm.fmprc.gov.cn/wcm/ 网址加上:wcm ...
随机推荐
- linux 下shell中if的“-e,-d,-f”的用法
文件表达式-e filename 如果 filename存在,则为真-d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真-L ...
- Mybatis 动态sql(转载)
原文地址:http://www.cnblogs.com/dongying/p/4092662.html 传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个 ...
- 如何连接虚拟的OneNote打印机
include <Windows.h> #include <iostream> int main() { HANDLE handle = CreateFile(L"O ...
- Ubuntu启动器创建
Ubuntu 启动器创建 启动器的本质是一个后缀为.desktop的文件,文件内容如下(这里为我创建的Chrome启动器) [Desktop Entry] Encoding=UTF- Name=Chr ...
- day_05 if条件判断和while循环作业题
1. 输入姑娘的年龄后,进行以下判断: 1. 如果姑娘小于18岁,打印“不接受未成年” 2. 如果姑娘大于18岁小于25岁,打印“心动表白” 3. 如果姑娘大于25岁小于45岁,打印“阿姨好” 4. ...
- WIN 7 的vs2008 试用版评估期结束的解决方法
1. 在VS2008安装目录下把Setup/setup.sdb文件中的 [Product Key] T2CRQGDKBVW7KJR8C6CKXMW3D 改成 [Product Key] PYHYPWX ...
- git的clone和github的fork
git的clone是从github上下载下来,clone到项目里面,fork是在本地修改后再提交到github上,在github上用request来进行提交,经作者确认后可以合同到mast分支上
- DevOps之持续集成SonarQube代码质量扫描
一.SonarQube介绍 SonarQube是一个用于代码质量检测管理的开放平台,可以集成不同的检测工具,代码分析工具,以及持续集成工具.SonarQube 并不是简单地把不同的代码检查 ...
- hihoCoder #1558 : H国的身份证号码I
题目链接:https://hihocoder.com/problemset/problem/1558 H国的身份证号码I 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 ...
- ArrayList遍历的三种方法
在输出很多的ArrayList的元素时,用普通的for循环太麻烦,因此本文介绍三种遍历ArrayList的方法 package test; public class Student { private ...