unity2D中,上下移动的物体

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

public class eagle : MonoBehaviour
{
   
   
    private Rigidbody2D rb;
    private Collider2D coll;
    private float upy,downy;
    public Transform upside,downside;
    public float speed;
Unity 2D中,让物体朝向某一物体移动有多种实现方法。 一种方法是通过计算朝向并使用`LookAt`相关思路。若使用x轴正方作为前方,看向目标物体位置,可通过以下代码实现朝向: ```csharp void Update() { // 假设target为目标物体的Transform Transform target; Vector3 v = target.position - transform.position; v.z = 0; Quaternion qua = Quaternion.FromToRotation(Vector3.right, v); transform.rotation = qua; // 移动部分,假设移动速度为moveSpeed float moveSpeed = 3; transform.Translate(Vector3.right * moveSpeed * Time.deltaTime); } ``` 这里利用`Quaternion.FromToRotation`计算朝向旋转,然后通过`Translate`方法让物体沿着x轴正方向移动 [^1]。 另一种方法是计算旋转角度并结合Dotween进行移动。先算出两个Sprite之间的旋转角度然后转成欧拉角,再结合Dotween位移到对应的位置,代码如下: ```csharp Rigidbody2D myRigbody; void Start() { myRigbody = GetComponent<Rigidbody2D>(); } void Update() { // 假设Collider为目标物体的Collider Collider2D Collider; Vector3 dir = Collider.transform.position - transform.position; float angle = Vector3.SignedAngle(Vector3.right, dir, Vector3.forward); Quaternion rotation = Quaternion.Euler(0, 0, angle); transform.rotation = rotation; myRigbody.DOMove(Collider.transform.position, 0.5f); } ``` 此方法计算出角度并转换为四元数进行朝向设置,同时使用Dotween的`DOMove`方法进行移动 [^4]。 还可以通过在屏幕内跟随鼠标移动的思路来实现朝向某一物体移动。先将物体的世界坐标转换为屏幕坐标,再处理鼠标位置,最后让物体朝向并移动: ```csharp using UnityEngine; using System.Collections; public class Follow : MonoBehaviour { Vector3 world; float moveSpeed = 3; void Update() { Vector3 targetposition = Camera.main.WorldToScreenPoint(this.transform.position); // 假设target为目标物体的Transform Transform target; Vector3 targetScreenPosition = Camera.main.WorldToScreenPoint(target.position); if (Input.GetMouseButton(0)) { targetScreenPosition.z = targetposition.z; world.x = Camera.main.ScreenToWorldPoint(targetScreenPosition).x; world.z = Camera.main.ScreenToWorldPoint(targetScreenPosition).z; world.y = this.transform.position.y; } if (this.transform.position == world) { moveSpeed = 0; } this.transform.LookAt(world); this.transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime); } } ``` 该方法通过将目标物体坐标转换为屏幕坐标,处理后再转换回世界坐标,让物体朝向并移动 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值