यहाँ मैं ऐरे में माउस पोजीशन वैल्यू स्टोर करने की कोशिश कर रहा हूँ ताकि मेरी बॉल उस ऐरे वैल्यू के अनुसार चल पड़े।

क्या ऐसा करने का कोई बेहतर तरीका है क्योंकि मैं परियोजना के अंत में फंस गया हूं। आपकी मदद तारीफ के काबिल होगी।

using UnityEngine;
using System.Collections;

[RequireComponent (typeof(Ball))]
public class BallDragLaunch : MonoBehaviour {
    //MyScript
    //public float powePerPixel;
    public float maxPower;
    public float sensitivity;
    //private Vector3 touvhPos;
    private bool isRolling;
    private float rotation = 10f;
    //
    private Rigidbody rg;
    private Vector3 dragStart, dragFlick, dragEnd;
    private float startTime, endTime, flickTime;
    private Ball ball;
    public Rigidbody ballRigid;
    public float [] mousePositionX, mousePositionY;

    // Use this for initialization
    void Start () {
        ball = GetComponent<Ball> ();
        //MyScript
        isRolling = false;
        //ballRigid = this.ball;
    }

    public void MoveStart (float speed) {
        if (Input.GetAxis ("Mouse X") > 0) {
            if (! ball.inPlay) {
                dragStart = Input.mousePosition;
                //transform.position = new Vector3(Mathf.Clamp(ball.transform.position.x + speed, ball.transform.position.x - speed, 0), -42.0f, 42.0f);

                float xPos = Mathf.Clamp (ball.transform.position.x + speed, -42.0f, 42.0f);

                float yPos = ball.transform.position.y;
                float zPos = ball.transform.position.z;
                ball.transform.position = new Vector3 (xPos, yPos, zPos);
                Debug.LogError("Right");
            }
        }

        if (Input.GetAxis ("Mouse X") < 0) {
            if (! ball.inPlay) {
                dragStart = Input.mousePosition;
                //transform.position = new Vector3(Mathf.Clamp(ball.transform.position.x + speed, ball.transform.position.x - speed, 0), -42.0f, 42.0f);

                float xPos = Mathf.Clamp (ball.transform.position.x - speed, -42.0f, 42.0f);

                float yPos = ball.transform.position.y;
                float zPos = ball.transform.position.z;
                ball.transform.position = new Vector3 (xPos, yPos, zPos);
                Debug.LogError("Left");
            }
        }
    }

    public void DragStart () {
        if (! ball.inPlay) {
            // Capture time & position of drag start
            dragStart = Input.mousePosition;
            startTime = Time.time;
            Debug.LogError("Drag Start");
        }
    }

    public void DragEnd () {
        if (Input.GetAxis ("Mouse X") < 0.2f) {

            if (! ball.inPlay) {
                // Launch the ball
                dragEnd = Input.mousePosition;
                endTime = Time.time;

                float dragDuration = endTime - startTime;
                float launchSpeedX = (dragEnd.x - dragStart.x) / dragDuration;
                float launchSpeedZ = (dragEnd.y - dragStart.y) / dragDuration;
                transform.Rotate (0, rotation, 0);
                Vector3 launchVelocity = new Vector3 (launchSpeedX * sensitivity, 0, launchSpeedZ);

                ball.Launch (launchVelocity);
                Debug.Log ("Drag End Ball Launch");
                Debug.LogError("Left Ball Movemet ");

            }
        }
        if (Input.GetAxis ("Mouse X") > 0.2f) {

            if (! ball.inPlay) {
                // Launch the ball
                dragEnd = Input.mousePosition;
                endTime = Time.time;

                float dragDuration = endTime - startTime;
                float launchSpeedX = (dragEnd.x - dragStart.x) / dragDuration;
                float launchSpeedZ = (dragEnd.y - dragStart.y) / dragDuration;
                transform.Rotate (0, rotation, 0);
                Vector3 launchVelocity = new Vector3 (launchSpeedX * sensitivity, 0, launchSpeedZ);

                ball.Launch (launchVelocity);
                Debug.Log ("Drag End Ball Launch");
                Debug.LogError("Right Ball Movemet ");

            }
        }
        if (Input.GetAxis ("Mouse X") >= 0 ) {

            if (! ball.inPlay) {
                // Launch the ball
                dragEnd = Input.mousePosition;
                endTime = Time.time;

                float dragDuration = endTime - startTime;
                float launchSpeedX = (dragEnd.x - dragStart.x) / dragDuration;
                float launchSpeedZ = (dragEnd.y - dragStart.y) / dragDuration;
                transform.Rotate (0, rotation, 0);
                Vector3 launchVelocity = new Vector3 (launchSpeedX * sensitivity, 0, launchSpeedZ);

                ball.Launch (launchVelocity);
                //Debug.Log ("Drag End Ball Launch");
                Debug.LogError("Mid Ball Right Move");
            }
        }
    }
}
2
Rehan Manandhar 3 पद 2015, 10:47

2 जवाब

सबसे बढ़िया उत्तर

लाजोस अरपाद के जवाब में

मुझे सरणियों के बजाय उपयोग सूचियों को कहना है। वे काम करने के लिए बहुत बेहतर हैं, और आपको यह जानने की आवश्यकता नहीं है कि हाथ से पहले सूची में कितने चर जाएंगे।

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

[RequireComponent (typeof(Ball))]
public class BallDragLaunch : MonoBehaviour {
    //MyScript
    public List<Vector3> mousPositions;

अपने कोड में आप सूची का इलाज उसी तरह से कर सकते हैं जिस तरह से आप किसी सरणी का इलाज करेंगे। सूची में माउस स्थिति जोड़ने के लिए बस लिखें

mousePosition.Add(Input.mousePosition);
1
Kyle Prichett 3 पद 2015, 16:17

आपका ball तीन आयामों में आगे बढ़ रहा है और आप उनके लिए Vector3 का उपयोग करते हैं। दूसरी ओर, आपके पास क्रमशः mousePositionX और mousePositionY नामक float[] दो सरणियाँ हैं। आप उस उद्देश्य के लिए Vector3[] का उपयोग कर सकते हैं। आप इसे कैसे घोषित करते हैं:

public Vector3[] mousePositions;

यदि आप इसका आकार जानते हैं, उदाहरण के लिए, n, तो यह है कि आप इसे कैसे आरंभ करते हैं:

mousePositions = new Vector3[n];

और यदि आप इसका i, मूल्य निर्धारित करना चाहते हैं, तो यह है कि आप इसे कैसे कर सकते हैं:

mousePositions[i] = ball.transform.position;

समस्याएं जिन्हें आपको हल करने की आवश्यकता है: - इसे शुरू करने से पहले आपको सरणी का आकार जानना होगा - आपको पहले सूचकांक का ट्रैक रखने की आवश्यकता है जहां आपने अभी तक एक वैध स्थिति नहीं रखी है

मेरा मानना है कि आपको पहले से सरणी के आकार का पता नहीं चलेगा और आप हमेशा इंडेक्स पर नज़र नहीं रखना चाहते हैं। तो मैं एक कतार का उपयोग करूंगा में तुम होता। चिंता मत करो, यह मुश्किल नहीं है। कुछ सफलता पाने के लिए पहले सरणी समाधान के साथ काम करने की कोशिश करें और जब आप इसे देखें, तो अपने कोड का बैकअप बनाएं और Queue<Vector3> प्रयोग करके देखें। मेरा विश्वास करो, यह इसके लायक है।

0
Lajos Arpad 3 पद 2015, 08:37