Unity实现弧形移动效果
作者:LLLLL__ 发布时间:2023-08-03 20:58:51
标签:unity,弧形移动
本文实例为大家分享了Unity实现弧形移动效果的具体代码,供大家参考,具体内容如下
一、实现效果
二、第一种实现方法——弧形插值
using UnityEngine;
public class ArcMove : MonoBehaviour
{
public GameObject curGo;//当前物体
public GameObject targetGo;//目标物体
public float value;
private void Update()
{
//计算中心点
Vector3 center = (curGo.transform.position + targetGo.transform.position) / 2;
center -= new Vector3(0, value, 0);
Vector3 start = curGo.transform.position - center;
Vector3 end = targetGo.transform.position - center;
//弧形插值
curGo.transform.position = Vector3.Slerp(start, end, Time.time / 200);
curGo.transform.position += center;
//判定是否到达目标点
float dis = Vector3.Distance(curGo.transform.position, targetGo.transform.position);
if (dis <= 1)
{
Debug.Log("到达目标点");
}
}
}
三、第二种实现方法——计算弧线中的夹角
using UnityEngine;
using System.Collections;
public class ArcMove : MonoBehaviour
{
public GameObject curGo;//当前物体
public GameObject targetGo;//目标物体
public float speed = 2;//速度
public int rotationAngle = 60;//旋转的角度
private float distanceToTarget;//两者之间的距离
private bool move = true;//是否移动
void Start()
{
//计算两者之间的距离
distanceToTarget = Vector3.Distance(curGo.transform.position, targetGo.transform.position);
StartCoroutine(Move());
}
/// <summary>
/// 移动
/// </summary>
private IEnumerator Move()
{
//移动到目标点停止移动
while (move)
{
Vector3 targetPos = targetGo.transform.position;
targetPos.z = 0;
//让它始终朝着目标
curGo.transform.LookAt(targetPos);
//计算弧线中的夹角
float angle = Mathf.Min(1, Vector3.Distance(curGo.transform.position, targetPos) / distanceToTarget) * rotationAngle;
curGo.transform.rotation = curGo.transform.rotation * Quaternion.Euler(Mathf.Clamp(-angle, -42, 42), 0, 0);
float currentDist = Vector3.Distance(curGo.transform.position, targetGo.transform.position);
if (currentDist < 0.5f)
{
move = false;
Debug.Log("到达目标点");
}
curGo.transform.Translate(Vector3.forward * Mathf.Min(speed * Time.deltaTime, currentDist));
yield return null;
}
}
}
来源:https://blog.csdn.net/LLLLL__/article/details/106255689
0
投稿
猜你喜欢
- Java提示缺少返回值语句怎么办?这里我们给大家提供具体的解决方法。首先,以下面的程序为例,会看到在控制台有:错误:缺少返回语句的提示。找到
- 知识点回顾封装封装(有时称为数据隐藏)是与对象有关的一个重要概念。从形式上来看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了
- 一、IO流的分类字符流ReaderInputStreamReader(节点流)BufferedReader(处理流)WriterOutput
- 本篇将从以下几个方面讲述反射的知识:class 的使用方法的反射构造函数的反射成员变量的反射一、什么是class类在面向对象的世界里,万物皆
- InputStreamReader和OutputStreamWriter源码分析1. InputStreamReader 源码(基于jdk1
- Java提供的数据类型主要分为两大类:基本数据类型和引用数据类型。Java中的基本数据类型名称大小取值范围byte型 (字节)8bit-12
- 本文实例为大家分享了安装和配置maven环境的具体步骤,供大家参考,具体内容如下下载maven:1.进入官网下载:http://maven.
- 缘起工作时使用java开发服务器后台,用Jersey写Restful接口,发现有一个Post方法始终获取不到参数,查了半天,发现时获取参数的
- 1.依赖的jar文件 jsch-0.1.53.jar2.登录方式有密码登录,和密匙登录 代码:主函数:import java.ut
- 介绍在分布式系统、微服务架构大行其道的今天,服务间互相调用出现失败已经成为常态。如何处理异常,如何保证数据一致性,成为微服务设计过程中,绕不
- 使用环境项目环境:Idea 2020.2.3、 Maven 3.6.3 、springboot 2.1.4本人在创建springboot项目
- 一、开发环境:1、windows 7 企业版2、IDEA 143、JDK 1.84、Maven 3.5.25、MariaDB6、SQLYog
- 定时器问题定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持。一个定时器的
- 分析:label标签控件是主线程创建的,不能直接从另一个线程访问.可以这样认为:不能跨线程直接访问控件;最简单的办法就是:using Sys
- 目录SpringBoot整合OpenApiOpenAPI依赖编写配置类改造优化OpenAPI常用注解介绍实体类controller类演示网上
- 一、首先我们先大致了解一下什么是多线程。(书上的解释)程序是一段静态的代码,它是应用软件的蓝本。进程是程序的一次动态执行过程,对
- 1.阻塞I/O模型阻塞IO模型是常见的IO模型,在读写数据时客户端会发生阻塞。阻塞IO模型的工作流程为:1.1在用户线程发出IO请求之后,内
- 一、项目背景1、介绍:最近在springboot项目中需要做一个阿里云OSS图片上传功能点,将OSS图片上传代码提取到公共工具类中,为了方便
- 一、AOP概述AOP,即面向切面编程,简单来说就是将代码中重复的部分抽取出来,在需要执行的时候使用 * 的技术,在不修改源码的基础上对方法
- 自定义注解实现接口幂等性方式近期需要对接口进行幂等性的改造,特此记录下。背景在微服务架构中,幂等是一致性方面的一个重要概念。一个幂等操作的特