Unity 限制范围-限制在4分之一圆柱形范围内活动

unity2D让游戏物体在不规则圈内走走停停 using System.Collections; using System.Collections.Generic; using UnityEngine; public class AnimalSrc100 : MonoBehaviour { private float speed = 4; public Vector3 dir;//this.gameobject的运动方向 ... 阅读详情

在我的游戏中,玩家的两只手操控中,不想让他们的手围着自己在一个圆形范围内随便乱跑,左手只想让他在左上角,右手在右上角范围活动。所以我制作这样一个算法来实现。
在这里插入图片描述

首先用Dot函数划分出4个区域,然后根据区域计算修正后的位置。
先上代码:
hero就是图中蓝色胶囊,hand是黄色的球,红色的newhand是最后修正的位置。如果两个球重叠表示不需要修正,如果修正了红色就是真实算法位置。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class testRange : MonoBehaviour
{
    public Transform hero;  //角色位置
    public Transform hand;  //模型手
    public Transform newhand;   //修正后的位置

    public float maxDis = 0.6f;
    protected void Update()
    {

        Vector3 dir;

        //让左手在第二象限。dot是0-1,dot2是-1~0
        Vector3 atHero = hero.position;
        Vector3 atHand = hand.position;
        atHero.y = atHand.y;
        dir = (atHand - atHero).normalized;
        float dot = Vector3.Dot(hero.forward, dir);
        float dot2 = Vector3.Dot(hero.right, dir);
        
        Debug.Log(dot + "," + dot2);
        Vector3 nowat = hand.position;
        if (dot < 0f)
        {
            //hand超过身后
            nowat = GetIntersectWithLineAndPlane(nowat, hero.forward, hero.forward, hero.position);
            
        }
        if (dot2 > 0f)
        {
            //hand超过右边
            nowat = GetIntersectWithLineAndPlane(nowat, hero.right, hero.right, hero.position);
            
        }

        //只能围绕身边
        Vector3 heroat = hero.position;
        heroat.y = nowat.y;
        float dis = Vector3.Distance(nowat, heroat);
        if (dis < maxDis)
        {
            Vector3 todir = (nowat - heroat).normalized;
            if (!todir.Equals(Vector3.zero))
                nowat = heroat + todir * maxDis;
            else
            {
                todir = (heroat - hand.position).normalized;
                nowat = heroat + todir * maxDis;
            }
        }
        newhand.position = nowat;
    }

    /// <summary>
    /// 计算直线与平面的交点
    /// </summary>
    /// <param name="point">直线上某一点</param>
    /// <param name="direct">直线的方向</param>
    /// <param name="planeNormal">垂直于平面的的向量</param>
    /// <param name="planePoint">平面上的任意一点</param>
    /// <returns></returns>
    private Vector3 GetIntersectWithLineAndPlane(Vector3 point, Vector3 direct, Vector3 planeNormal, Vector3 planePoint)
    {
        float d = Vector3.Dot(planePoint - point, planeNormal) / Vector3.Dot(direct.normalized, planeNormal);

        return d * direct.normalized + point;
    }
}

上面的代码就是计算hand在第二象限的限制,首先我们观察到dot 在第二象限是 0 ~ 1 的范围,dot2是 -1 ~ 0 ,当超过这个范围了,我们可以通过GetIntersectWithLineAndPlane函数来计算超过这个结界的碰撞点,防止出界。

最后我们可能不希望他跑到玩家某型里面了,我们给一个半径范围maxDis ,让他不要和玩家重叠。
看看效果图。
请添加图片描述

当我们移动到背后的时候,小球最多和我们平行,当小球移动到右边的时候那么最多知道面前,而且不会进入玩家模型范围。

相交算法链接来自

unity中鼠标拖动UI并限制拖动区域 unity鼠标拖动UI并限制拖动区域 1、演示如下: 2、代码如下:将代码挂载到需要拖拽的ui上即可 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class LimitUI_Drag : MonoBehaviour, IBeginDragHandler, IDragHandler { [Header( 阅读详情

相关推荐

Unity游戏AI导航进阶:基于Recast/Detour实现动态寻路与避障

在游戏开发中,导航网格(NavMesh)是实现AI自主寻路的核心技术,它定义了虚拟角色在3D场景中的可行走区域。其原理是通过对场景几何体进行体素化处理,生成由凸多边形构成的网格,A*等寻路算法在此网格上运行以计算最优路径。这项技术的核心价值在于为AI提供了空间认知和路径规划能力,是实现RTS、MOBA、开放世界RPG等类型游戏中大规模单位调度的基础。面对Unity内置NavMesh在动态场景更新和**高性能寻路**方面的局限,开发者常转向更底层的解决方案。Recast负责从三角形网格生成导航网格,Detou

weixin_33933118的博客 817

unity 限制范围拖拽UI

/************************************************************************* * Copyright © #COPYRIGHTYEAR# LiuKe. All rights reserved. *------------------------------------------------------------------------ * File : DragHandlerCopy.cs * De.

weixin_42509027的博客 589

Unity与Vuforia AR开发实战:从环境搭建到性能优化全指南

增强现实(AR)技术通过计算机视觉与实时3D渲染,将虚拟信息叠加到现实世界,其核心原理在于空间定位、图像识别与虚实融合。这项技术的价值在于打破数字与物理世界的边界,为教育、零售、工业、文旅等领域带来沉浸式交互体验。在工程实践中,Unity作为领先的实时3D开发平台,结合Vuforia这一专注于计算机视觉的AR SDK,构成了稳定高效的开发工作流。该组合支持图像目标、模型目标及无标记平面检测等多种识别模式,开发者可借助其完善的工具链快速构建应用。本文聚焦于Unity与Vuforia的集成实战,详细解析环境配置

weixin_30562507的博客 435

辅助工具:圆柱体绘制

      最近处理动态网格生成,二维用CanvasRender,三维用meshfilter,这个属于常规操作。       当然具体的细节还是很多的,这里以我觉得比较有代表性的三维圆柱体网格动态创建为例。       假设三维空间中存在两个点,以这两个点为端点生成圆柱体。 ...

羊羊的博客 1905

[Mesh]代码生成圆柱网格

如果有更好的方法欢迎指正,下一片,我们来弯曲这个网格。

CarefreeQ的博客 8259

Vuforia与Unity集成开发实战:从环境配置到AR应用发布全流程指南

增强现实(AR)技术通过计算机视觉与传感器融合,将虚拟信息叠加到真实世界,其核心原理在于实时环境感知与精准空间锚定。在移动开发领域,Unity引擎凭借其强大的跨平台能力与丰富的生态,成为构建AR应用的主流工具。而Vuforia作为业界领先的AR SDK,提供了稳定的图像识别、模型追踪与平面检测功能,其技术价值在于降低了高精度空间计算的开发门槛。在实际工程实践中,将Vuforia SDK集成到Unity项目中,是快速实现稳定AR体验的关键路径,尤其适用于教育、工业可视化及互动营销等需要高识别率的应用场景。本文

weixin_34162228的博客 424

Unity制作AR

demo视频 增强现实技术(Augmented Reality,简称 AR),已经流行了很多年,在前几年还在做flash的时候阿赵我也曾经接触过。最近我突然对Unity实现AR效果产生了兴趣,所以也搜索了一下资料,自己做了个demo。 使用Unity来制作AR应用,现在最主流的有2种插件可以使用 1、高通的Vuforia 2、ARToolKit 这两种插件我都下载下来使用...

阿赵的博客 7009

Unity与Vuforia打造多图识别AR应用:从开发到安卓APK打包全流程

增强现实(AR)技术通过将虚拟信息叠加到现实世界,为用户创造了全新的交互体验。其核心原理在于计算机视觉的实时识别与跟踪,结合三维渲染引擎,实现虚实融合。在移动开发领域,这项技术能极大提升教育、营销、娱乐等场景的沉浸感和互动性。Vuforia作为成熟的AR开发平台,提供了稳定的图像识别能力,而Unity引擎则以其强大的跨平台渲染和资源管理功能,成为构建AR内容的首选工具。将两者结合,开发者可以高效创建出基于图像目标(Image Target)的AR应用。本文聚焦于如何利用Vuforia实现多图识别,并详细解析

weixin_30675247的博客 417

Unity插件——Mega-Fires Mesh变形插件使用心得

插件使用——Mega-Fires -Mesh变形插件使用心得(一) 开发环境 Mega-Fires版本:3.48 Unity 2018.4.1 vs 2019 平台:PC 插件使用前准备工作 1,查看版本及支持情况。找到匹配的插件版本或者最新的插件版本。 2,导入后查看是否有报错信息。以开发环境下的版本导入无报错。 3,如有API过时报错或导入后在Editor模式下实例场景自动执行了动画导致...

明哲的博客 6949

基于3Ds Max与Unity的虚拟场景漫游项目全流程实践指南

三维建模与实时渲染是数字内容创作的核心技术,其原理是通过计算机图形学算法将三维数据转化为二维图像。在工程实践中,3Ds Max等建模软件负责创建高精度模型与材质,而Unity等游戏引擎则通过实时渲染管线驱动交互式应用。这项技术的价值在于能够构建沉浸式的虚拟环境,广泛应用于游戏开发、虚拟现实、建筑可视化及数字孪生等领域。本文以“南海禅寺”虚拟漫游这一经典毕业设计项目为例,系统讲解从模型创建、场景搭建到交互编程的完整工作流,深入剖析PBR材质流程、URP渲染管线优化等关键技术,并针对性能优化与打包发布提供实战解

404

Unity3D实现项目限制功能(使用次数限制和时间限制)

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。在软件开发的时候,可能会遇到程序的使用次数限制,以及时间的限制,下面就写一下这两种方法是新建注册表,增加键值对,修改键值,完成对程序的控制提示:以下是本篇文章正文内容,下面案例可供参考以上就是讲了两种限制方法不定时更新Unity开发技巧,觉得有用记得一键三连哦。

心疼你的一切博客 1812

Unity机器人仿真入门:使用URDF Importer从ROS导入与控制机器人模型

机器人仿真与数字孪生是机器人开发与算法验证的关键环节,它通过在虚拟环境中模拟真实物理特性,为算法测试、安全验证和AI训练提供了高效、低成本的平台。其核心原理在于将机器人的运动学、动力学模型与物理引擎结合,实现逼真的交互模拟。这项技术的核心价值在于打通了机器人算法开发(如ROS生态)与高保真实时仿真环境(如Unity)之间的壁垒,极大地加速了从算法设计到实物部署的迭代周期。在应用场景上,它广泛服务于机械臂抓取仿真、移动机器人SLAM测试、多机协作以及具身智能的强化学习训练。本文聚焦于实现这一流程的核心工具——

weixin_34210740的博客 471

Unity开发AR之Vuforia-MultiTarget笔记

在增强现实(AR)技术蓬勃发展的今天,越来越多的开发者开始探索如何将AR应用于各种场景中。Vuforia作为一个领先的AR开发平台,为开发者提供了强大的工具和功能,使得创建AR体验变得更加简单和直观。本文将为您介绍Vuforia的基本概念、特点,以及如何配置和使用MultiTarget功能,旨在帮助您更加深入地理解Vuforia SDK,并在您的项目中有效地应用。Vuforia是一个由PTC开发的增强现实SDK,它提供了丰富的功能,使团队能够在各种设备上创建互动的AR应用。

TxNet 1049

【URP】Unity[后处理]帕尼尼投影PaniniProjection

本文介绍了Unity URP后处理中的Panini Projection技术,这是一种圆柱形投影效果,主要用于修正广角镜头产生的透视畸变。核心原理是通过非线性坐标变换保持垂直线条笔直,适用于建筑可视化、全景展示等场景。文章详细解析了其数学原理、URP实现流程和参数调节方法,并提供了典型应用示例。该技术源自18世纪画家Panini的透视画法,Unity在2019年URP管线中引入,通过Volume框架实现后处理效果。开发时建议动态调节Distance参数实现平滑过渡,但需注意移动端性能消耗。

设计 AI 玩游戏🎮 810

ROS入门必学导航算法——Navigation

该平台集成了多款无人车底盘,包括履带式、四轮差速、阿克曼、麦克纳姆轮底盘等,以满足不同形式和配置的需求,并搭载了RTK定位系统、双目相机、深度相机和激光雷达等多种传感器,以满足开发者的科研需求。amcl节点接收里程计数据(通过"odom"话题)和激光雷达数据(通常通过"scan"话题),结合已知的地图,实时地估计出机器人在该地图上的位置。在ROS中,这是通过"tf库"变换实现的,通过将传感器数据转换到共同的参考系中,系统可以更容易地集成来自不同传感器的数据,并确保它们在相同的空间和时间范围内可用。

AMOVLAB(阿木实验室) 2910

FreeModbus从入门到实战:手把手教你用STM32实现工业级Modbus RTU通信

本文详细介绍了如何使用STM32和FreeModbus实现工业级Modbus RTU通信,涵盖硬件搭建、协议栈移植及优化技巧。重点解析了FreeModbus的移植过程,包括串口驱动适配、定时器配置和工业级稳定性优化,为开发者提供了一套完整的工业通信解决方案。

weixin_33737774的博客 352

Unity技术手册 - 粒子发射和生命周期内速度子模块

这是小空坚持写的Unity新手向系列,欢迎品尝。新手(√√√)大佬(√) 粒子这一块是个系列文章,并且介绍的非常详细,建议收藏。 Rate over Time-单位时间产生的粒子数:每秒产生多少粒子Rate over Distance-单位距离产生的粒子数:移动Position每个单位整数产生的数量,设置部不为0移动整个粒子系统可看出效果Bursts-爆发突发:有五个数值Time时间-Count数量-Cycles周期-Interval间隔-Probability概率。Time时间表示粒子启动后延迟多少秒爆发

空名先生 5522

西门子SCL出栈入栈算法(附带源码)

栈是一种数据结构,它的特点是数据后入先出(Last In First Out,LIFO)或者说是先入后出,意思是一样的。栈有三个基本动作:初始化、入栈和出栈。接下来给大家介绍下我使用SCL语言编写的栈函数,它以不定长数组作为存储区,以实数作为数据类型,实现了栈的初始化、入栈和出栈的操作。

CHUXUEZHE8210的博客 2335

Unity空间查询三剑客:OverlapSphere、Box、Capsule原理与避坑指南

空间查询(Spatial Query)是游戏开发中实现范围检测、AI感知、技能判定等核心功能的基础技术。其本质是通过数学几何体(球体、长方体、胶囊体)主动扫描世界,判断哪些碰撞体位于指定区域内,区别于依赖物理响应的射线检测(Raycast)。Physics.OverlapSphere、OverlapBox和OverlapCapsule正是Unity提供的三大高效非触发式查询API,底层基于Broadphase加速结构,支持任意时刻调用、零物理副作用、可跨帧使用。它们广泛应用于AOE伤害计算、角色视野模拟、地

weixin_30879833的博客 460

【干货】S7-PLCSIM Advanced V3.0 无法启动实例( Error Code:-30,LicenseNotFound)问题解决方法

【干货】S7-PLCSIM Adavanced V3.0 无法启动实例( Error Code:-30,LicenseNotFound)问题解决方法

handinvv的博客 5万+

python-snap7 报错:can‘t find snap7 library. If installed, try running ldconfig

1、使用场景: Python 读取西门子 S7 系列 PLC 信息,会用到 snap7 库,网上也有很多案例。但是,运行时会报错:can't find snap7 library. If installed, try running ldconfig 2、解决方案: A、下载项目需要依赖的 dll、lib 文件: i、Sourceforge下载:https://sourceforge.net/projects/snap7/files/ ii、优快云下载(免费):https://dow.

蜡笔小新历险记的博客 3651

Unity中URDF机器人模型导入与强化学习环境搭建全流程详解

机器人仿真与强化学习结合是当前智能控制领域的重要研究方向。其核心原理在于通过物理引擎构建高保真虚拟环境,使智能体通过试错学习复杂控制策略。这项技术的价值在于能够安全、高效地训练机器人完成在现实世界中成本高昂或危险的任务,如复杂地形移动、物体抓取等。在应用场景上,它广泛应用于足式机器人步态学习、机械臂操作、自动驾驶仿真等领域。本文聚焦于使用Unity引擎和URDF标准,将轮腿机器人Go2W模型导入并调试为可用的强化学习训练环境,详细解决了URDF导入、物理参数校正、关节控制器编写等工程实践中的关键问题,为后续

weixin_30463341的博客 397

EWM与SAP ERP的数据集成

1、EWM与 SAPERP的无缝集成-基础数据&业务交易数据 2、SAP ERP设置:连接SAP ERP和EWM必须设置应用程序连接支持-ALE(Application Link Enabling) 3、ERP - EWM仓库数据集成: SAP ERP需要设置配置信息,连接ERP和EWM之间的库存管理应用,基于工厂+库存地点对应一个仓库号来进行配置; 在ERP中需要创建一个中间虚拟仓库,代表ERP仓库;“中间虚拟”仓库创建之后,工厂+库存地点的信息...

weixin_43899798的博客 3797
上一篇: AutoHand第三人称的AutoHandVRIK开启和关闭
下一篇: Unity根据目标点的位置计算Input输入
Thinbug
博客等级 码龄22年 2万+粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinbug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值