簡體   English   中英

讓object勻速滑翔到鼠標 Unity C#

[英]Let object glide to mouse with constant speed Unity C#

我有一個子彈 object,它需要在按下鼠標時滑向鼠標(但釋放時應該停止)。 我嘗試了多種方法,但每次子彈加速時,都會以橢圓形圍繞鼠標轉圈(我也有重力)。 我怎樣才能讓它以恆定的速度向鼠標移動?

這是我的代碼:

using UnityEngine;
public class Bullet : MonoBehaviour {
    public Rigidbody rigidbody;
    void Start() {
        rigidbody = GetComponent<Rigidbody>();
        rigidbody.useGravity = false;
        rigidbody.velocity = new Vector3(0, -0.3F, 0);
    }
    float getX(Vector3 transform_pos, Vector3 mouse_pos) {
        float tx = transform_pos.x;
        float mx = mouse_pos.x;
        if (tx == mx) { return 0;
        } else if (tx > mx) { return -1;
        } else if (tx < mx ) { return 1;
        }else { return 0; }
    }
    void Update() {
        if (Input.GetMouseButton(0)) {
            Vector3 mouse_pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            transform.LookAt(mouse_pos);
            float x = getX(transform.position, mouse_pos);
            float y = transform.position.y > mouse_pos.y ? -0.03F : 0.03F;
            rigidbody.AddForce(new Vector3(x, 0, transform.position.z), ForceMode.VelocityChange);
            Debug.Log(x.ToString() + y.ToString());
        }
        if (transform.position.y < -5 | transform.position.y > 5) {
            Destroy(transform.gameObject);
        }
        rigidbody.AddForce(Vector3.down, ForceMode.Force);
    }
}

我嘗試了更多,發現使用rigidbody.velocity()比使用rigidbody.AddForce( rigidbody.AddForce()更好,所以替換rigidbody.AddForce(new Vector3(x, 0, transform.position.z), ForceMode.VelocityChange); rigidbody.velocity = new Vector3(x, y, transform.position.z); (將xy替換為速度,它應該可以工作。請注意,這會替換速度,因此所有運動都將停止)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM