Unity一个智能火力点,根据攻击范围自动旋转攻击
来源:互联网 发布:js picker 编辑:程序博客网 时间:2024/05/16 15:17
参照链接 : 点击打开链接
using UnityEngine;using System.Collections;public class AutoAttack : MonoBehaviour { public Transform myTransform = null; public Transform target; public float rotationAngle = 60f; void Start() { myTransform = this.transform; } void Update() { if (target == null) return; if (Mathf.Abs(Vector3.Distance(target.transform.position, transform.position)) > 10) { return; } Quaternion rotation = Quaternion .LookRotation (target.position - myTransform.position); float angle = Quaternion.Angle(rotation, Quaternion.identity); if(angle < rotationAngle * 0.5f) { myTransform.rotation = Quaternion.Slerp(myTransform.rotation, rotation, Time.deltaTime * 0.2f); Debug.DrawLine(myTransform.position, target.position, Color.red); } else { return; } } void OnDrawGizmos() { for (int i = 0; i <= rotationAngle * 0.5f; i += 5) { for (int j = 0; j < rotationAngle * 0.5f; j += 5) { for (int k = 0; k < rotationAngle * 0.5f; k += 5) { //计算攻击角度范围内的四元素即旋转值 Quaternion r0 = Quaternion.Euler(Quaternion.identity.eulerAngles.x - i, Quaternion.identity.eulerAngles.y - j, Quaternion.identity.eulerAngles.z); Quaternion r1 = Quaternion.Euler(Quaternion.identity.eulerAngles.x + i, Quaternion.identity.eulerAngles.y + j, Quaternion.identity.eulerAngles.z); //计算该旋转方向上的最远点的坐标, 自身坐标加上 旋转 乘以 距离 Vector3 f1 = myTransform.position + (r0 * Vector3.forward) * 10; //myTransform.forward transform.TransformDirection( Vector3 f2 = myTransform.position + (r1 * Vector3.forward) * 10; Debug.DrawLine(myTransform.position, f1, Color.red); Debug.DrawLine(myTransform.position, f2, Color.red); Quaternion r3 = myTransform.rotation; Quaternion r4 = Quaternion.Euler(Quaternion.identity.eulerAngles.x - i, Quaternion.identity.eulerAngles.y + j, Quaternion.identity.eulerAngles.z); Quaternion r5 = Quaternion.Euler(Quaternion.identity.eulerAngles.x + i, Quaternion.identity.eulerAngles.y - j, Quaternion.identity.eulerAngles.z); Vector3 f4 = myTransform.position + (r4 * Vector3.forward) * 10; //myTransform.forward transform.TransformDirection( Vector3 f5 = myTransform.position + (r5 * Vector3.forward) * 10; Debug.DrawLine(myTransform.position, f4, Color.red); Debug.DrawLine(myTransform.position, f5, Color.red); } } } }}
在scene试图可以看到下面的效果:
0 0
- Unity一个智能火力点,根据攻击范围自动旋转攻击
- Unity一个智能火力点,根据攻击范围自动旋转攻击
- [Unity实战]攻击范围的绘制
- [Unity实战]攻击范围的绘制
- 怪物仇恨范围,自动攻击,血条
- Unity3D 攻击范围检测
- 进入攻击范围
- 敌人进入攻击范围
- 利用LineRenderer画出一个圆,类似于lol中的攻击范围
- [Unity插件][AI]敌人自动攻击AI插件
- Unity攻击判定
- unity人物攻击类
- 攻击
- 攻击
- metasploit 自动攻击
- msf自动攻击命令
- 火力点
- 【整理】关于角色攻击范围判定和攻击判定
- java并发编程之线程同步辅助类(一)
- 【Spring】web开发 javaConfig方式 图解
- 嵌入式linux开发板使用pulseaudio连接蓝牙耳机播放音频文件
- UVA1586 Molar mass
- 4516: [Sdoi2016]生成魔咒
- Unity一个智能火力点,根据攻击范围自动旋转攻击
- 摘要rxjava简单使用
- android自定义弹性ScrollVIew ,十分简单!
- 实际用户ID,有效用户ID和设置用户ID
- 大数据Top K算法思路
- 堆、栈知识点
- 《CLR via C#》读书笔记-线程同步(二)
- 开源文档的五个趋势
- 第五章