【unity2D横板】【sunnyland】敌人巡逻追击主角以及返回原点

简介: 【unity2D横板】【sunnyland】敌人巡逻追击主角以及返回原点

今天研究了一下午,总算把这个小鸟的逻辑给做出来了


用了Math.Pow(x,y),这是C#中用来求数字的幂的方法


还有Vector2.MoveTowards方法。


小鸟的逻辑是,自动巡逻,在侦察范围内发现主角则会一直追击主角逃出追击范围为止


假设逃出追击范围并且小鸟出界,那么它则往原点飞


我设置了三个状态


巡逻,追击,返回原点


看代码吧

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class eagleController : MonoBehaviour
{
    // Start is called before the first frame update
    public float speed = 3.0f;
    public float changeTime = 3.0f;
    float Timer;
    float direction = 1;
    Animator animator;
    public GameObject Player = null;//这里来存放主角对象
    private float XBorder;//X边界
    private float YBorder;//Y边界
    private bool discoverable;//发现主角
    private bool outside;//出界
    public float radial;//边界半径
    Vector2 origin;
    void Start()
    {
        Timer = changeTime;
        animator = GetComponent<Animator>();
        origin = transform.position;//存放原点
        XBorder = origin.x + radial;
        YBorder = origin.y;
    }
    // Update is called once per frame
    void Update()
    {
        Rigidbody2D playerRigid = Player.GetComponent<Rigidbody2D>();
        Vector2 beforePosition = transform.position;
        if (Math.Pow(playerRigid.position.x - transform.position.x, 2) + Math.Pow(playerRigid.position.y - transform.position.y, 2) <= Math.Pow(radial, 2))//在圆内,代表发现主角
        {
            flyAttack(Time.deltaTime, playerRigid);
            discoverable = true;
        }
        else discoverable = false;
        if (transform.position.x > origin.x + XBorder || transform.position.x < origin.x - XBorder || transform.position.y > origin.y + YBorder || transform.position.y < origin.y - YBorder)//巡逻边界
        {
            outside = true;
        }
        flyOrigin(origin, Time.deltaTime);
        flyNormal();
        Vector2 currentPosition = transform.position;
        animator.SetFloat("fly", currentPosition.x - beforePosition.x  );
    }
    private void OnCollisionEnter2D(Collision2D other)
    {
        foxcontroller fox = other.gameObject.GetComponent<foxcontroller>();
        if (fox != null)
        {
            fox.ChangeHealth(-1);
        }
    }
    private void flyNormal()//巡逻姿态
    {
        if (discoverable||outside)
        {
            return;
        }
        Vector2 position = transform.position;
        Timer -= Time.deltaTime;
        position.x = position.x + direction * Time.deltaTime * speed;
        transform.position = position;
        if (Timer < 0)
        {
            Timer = changeTime;
            direction = -direction;
        }
        animator.SetFloat("fly", direction);//动画控制
    }
    public void flyAttack(float dt,Rigidbody2D playerRigid)//攻击姿态
    {
        float quickSpeed = speed * 3;
        transform.position = Vector2.MoveTowards(transform.position, playerRigid.position, quickSpeed*dt);
        //Debug.Log(Math.Pow(playerRigid.position.x - transform.position.x, 2));
    }
    public void flyOrigin(Vector2 origin,float dt)//出界返回原点
    {
        if (discoverable||!outside)
        {
            return;
        }
        transform.position = Vector2.MoveTowards(transform.position,origin , speed * dt);
        if (transform.position.x == origin.x && transform.position.y == origin.y)
        {
            outside = false;
        }
    }
}

返回原点以及巡逻


image.gif


追击




d715c88e591949e88aaafc3279d70e7b.gif























相关文章
|
11月前
【unity2D横板】【sunnyland】角色的跳跃
【unity2D横板】【sunnyland】角色的跳跃
|
8天前
|
开发框架 Java C#
【Unity逆向】玩游戏遇到的“飞天锁血”是怎么实现的?
【Unity逆向】玩游戏遇到的“飞天锁血”是怎么实现的?
99 0
|
8天前
|
存储 自然语言处理 监控
【Unity 实用工具篇】| 游戏多语言解决方案,官方插件Localization 实现本地化及多种语言切换
Unity的多语言本地化是一个很实用的功能,它可以帮助游戏支持多种语言,让不同语言的玩家都能够更好地体验游戏。 而实现本地化的方案也有很多种,各个方案之间也各有优劣,后面也会对多个方案进行介绍学习。 本文就来介绍一个专门作用于多语言本地化的Unity官方插件:Localization 。 这个插件方便进行游戏的多语言本地化,让游戏支持多种语言,下面就来看看该插件的使用方法吧!
|
8天前
|
定位技术 C# 图形学
Unity和C#游戏编程入门:创建迷宫小球游戏示例
Unity和C#游戏编程入门:创建迷宫小球游戏示例
85 2
|
9月前
|
开发框架 Java .NET
《unity游戏优化》第8章内存优化
《unity游戏优化》第8章内存优化
|
8天前
|
运维 API C#
【Unity游戏破解】外挂原理分析
【Unity游戏破解】外挂原理分析
177 0
【Unity游戏破解】外挂原理分析
|
8天前
|
vr&ar 图形学
【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
66 0
|
8天前
|
图形学
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
197 0
|
8天前
|
C# 图形学
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
223 1
|
8天前
|
C# 图形学
【Unity 3D】游戏对象、添加删除获取组件、预制体Prefabs简介
【Unity 3D】游戏对象、添加删除获取组件、预制体Prefabs简介
94 0