1 Câu hỏi: Làm thế nào để hạn chế biến đổi. Chuyển đổi bên trong một hình cầu

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi có hình cầu có tên Con trỏ có thể di chuyển khắp mọi nơi với Transform.TransTable () nhưng tôi muốn quả cầu này chỉ có thể di chuyển bên trong một nửa quả cầu có tên LimitSphere, tôi không biết làm thế nào.

tôi đã thử sử dụng Mathf.Clamp nhưng như bạn có thể thấy trên hình ảnh này

nhưng khi tôi đặt một hình vuông được ghi, tôi mất quá nhiều khoảng trống (màu vàng)
và khi tôi đặt một hình vuông được bao quanh thì có quá nhiều khoảng trống ngoài vòng tròn (màu tím /hồng)

Vậy có giải pháp nào để hạn chế chuyển động bên trong quả cầu không?

CHỈNH SỬA: Đó là mã thực tế của tôi:

using UnityEngine;
using System.Collections;

public class TranslationClavier : MonoBehaviour {

    public float vitesse_translation = 1.0f;



    void Update () {
            if (Input.GetKey(KeyCode.DownArrow))
            {
                transform.Translate(Vector3.up * vitesse_translation * Time.deltaTime);
            }

            if (Input.GetKey(KeyCode.UpArrow))
            {
                transform.Translate(Vector3.down * vitesse_translation * Time.deltaTime);
            }

            if (Input.GetKey(KeyCode.RightArrow))
            {
                transform.Translate(Vector3.right * vitesse_translation * Time.deltaTime);
            }

            if (Input.GetKey(KeyCode.LeftArrow))
            {
                transform.Translate(Vector3.left * vitesse_translation * Time.deltaTime);
            }

            if (Input.GetKey(KeyCode.I))
            {
                transform.Translate(Vector3.forward * vitesse_translation * Time.deltaTime);
            }

            if (Input.GetKey(KeyCode.K))
            {
                transform.Translate(-Vector3.forward * vitesse_translation * Time.deltaTime);
            }
    }

}

bên dưới bạn có thể thấy quả cầu nhỏ của tôi và tôi muốn kẹp cô ấy vào trong máy va chạm quả cầu lớn

    
- 1
1 Câu trả lời                              1                         

Nó rất dễ dàng. Trước tiên, bạn cần biết khoảng cách bạn sắp đi, từ trung tâm của quả cầu, vì vậy bạn làm điều đó theo hai bước. Giả sử bạn đang gọi nó từ một transfrom được chẵn lẻ đến một hình cầu bạn có thể làm:

Vector3 newPosition=transform.localPosition+myDetla;
if (newPosition.magnitude>sphereRadius) transform.Translate(myDelta);

Điều này sẽ chỉ thực hiện bản dịch nếu đích nằm trong phạm vi. Bất cứ điều kiện nào khác (như ràng buộc nửa hình cầu) bạn cần làm - bạn có thể phân tích newPocation mới. Nếu bạn muốn luôn luôn di chuyển, nhưng giới hạn cường độ của Movemnet, bạn có thể sử dụng thực tế là bạn có thể chia Vectơ thành hướng và độ lớn và lắp lại chúng, ví dụ

if (newPosition.magnitude>sphereRadius)  
      newPosition=newPosition.direction*sphereRadius; //will clamp to sphere
if (newPosition.y<0) newPosition.y=0;
transform.localPosition=newPosition;
    
0
2019-05-08 16: 27: 13Z
  1. cảm ơn câu trả lời của bạn nhưng tôi mới biết về Unity và tôi không chắc chắn hiểu rõ về cách áp dụng mã của bạn trên tôi
    2019-05-08 19: 20: 34Z
  2. 'myDelta' là gì?
    2019-05-08 21: 20: 39Z
  3. myDelta nên được chỉ định các giá trị tùy thuộc vào mã khóa tức là. Vector3.left * vitesse_translation * Time.deltaTime, lưu trữ nó trong một biến tạm thời trước khi bạn dịch
    2019-05-09 09: 18: 28Z
  4. được rồi ... bây giờ tôi hoàn toàn bị mất với câu trả lời của bạn: '0
    2019-05-09 10: 33: 04Z
  5. bạn có thể vui lòng cho tôi một ví dụ về cách áp dụng mã của bạn vào tôi
    2019-05-09 10: 36: 56Z
nguồn đặt đây