当前位置: 首页 > news >正文

Unity3d实现简单的战斗

使用u3d实现一个简单的战斗demo,记下学到的知识点,以备后查。

1.判断是否点中指定物体
if (Input.GetMouseButton(0))
{Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray, out RaycastHit hit)){//坐标转换Vector3 mousePositionInWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition);mousePositionInWorld.y = 0;this.addAgent(camp, mousePositionInWorld);}
}
2.动态创建预制体
GameObject prefab = Resources.Load<GameObject>("prefabs/changeHp");
GameObject obj = Instantiate(prefab, parent);

  预制体资源放置要求如下:

3.NavMeshAgent的使用

   参考资料:https://docs.unity3d.com/cn/2022.1/Manual/Navigation.html

4.碰撞检测

    碰撞检测的两个必备条件:任意一方具备刚体;碰撞双方均有Collider组件

        

 若勾选IsTrigger,碰撞时则通过下面的函数监听碰撞事件:

private void OnTriggerEnter(Collider collider) { }private void OnTriggerStay(Collider other)
{}private void OnTriggerExit(Collider other)
{}

未勾选,碰撞时通过下面的函数监听碰撞事件:

private void OnCollisionEnter(Collision collision)
{}private void OnCollisionStay(Collision collision)
{}private void OnCollisionExit(Collision collision)
{}

使用示例: 

private void OnTriggerEnter(Collider collider)
{if (collider.gameObject.tag=="u_human"){Unit unit = collider.gameObject.GetComponent<Unit>();if (unit && unit._campType != this._bulletCamp){int vv = -Random.Range(50, 120);unit.changeHpValue(vv);this.destorySelf();}}
}private void destorySelf() {Destroy(this.gameObject);
}

实现的效果如下图:

Demo地址:https://github.com/jjinglover/Unity3dDemos

相关文章:

  • CHS_08.2.3.6_1+生产者-消费者问题
  • TCP 三次握手
  • 从0搭建react+ts+redux+axios+antd项目
  • 为什么SSL会握手失败?SSL握手失败原因及解决方案
  • 【Java并发】聊聊Disruptor背后高性能的原理
  • 第8章 python深度学习——波斯美女
  • Dart 语言入门
  • mongodb config
  • 从零开始:CentOS系统下搭建DNS服务器的详细教程
  • 开源软件:颠覆创新的力量
  • 网安文件包含漏洞
  • 使用pygame建立一个简单的使用键盘方向键移动的方块小游戏
  • MVVM下的窗口关闭
  • npm 包管理工具
  • QT SQL
  • centos安装java运行环境jdk+tomcat
  • CSS 三角实现
  • go语言学习初探(一)
  • HashMap剖析之内部结构
  • HTTP中的ETag在移动客户端的应用
  • Mocha测试初探
  • Python实现BT种子转化为磁力链接【实战】
  • quasar-framework cnodejs社区
  • Redux 中间件分析
  • Web Storage相关
  • 给新手的新浪微博 SDK 集成教程【一】
  • 构建二叉树进行数值数组的去重及优化
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 我从编程教室毕业
  • const的用法,特别是用在函数前面与后面的区别
  • ​flutter 代码混淆
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #Linux(权限管理)
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (70min)字节暑假实习二面(已挂)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (八)c52学习之旅-中断实验
  • (第27天)Oracle 数据泵转换分区表
  • (二十四)Flask之flask-session组件
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十)T检验-第一部分
  • (四) 虚拟摄像头vivi体验
  • (转)setTimeout 和 setInterval 的区别
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ******IT公司面试题汇总+优秀技术博客汇总
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Remoting学习笔记(三)信道
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 使用 XPath 来读写 XML 文件
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .netcore如何运行环境安装到Linux服务器
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .sh 的运行