2

Unity3Dでマウスクリック時にオブジェクトのコピーを作成するにはどうすればよいですか?

また、実行時に複製するオブジェクトを選択するにはどうすればよいですか? (マウス選択が望ましい)。

4

3 に答える 3

5
function Update () {

    var hit : RaycastHit = new RaycastHit();
    var cameraRay : Ray  = Camera.main.ScreenPointToRay(Input.mousePosition);

    if (Physics.Raycast (cameraRay.origin,cameraRay.direction,hit, 1000)) {
        var cursorOn = true;
    }

    var mouseReleased : boolean = false;

    //BOMB DROPPING 
    if (Input.GetMouseButtonDown(0)) {

        drop = Instantiate(bomb, transform.position, Quaternion.identity);
        drop.transform.position = hit.point;

        Resize();

    }
}

function Resize() {
    if (!Input.GetMouseButtonUp(0)) {
            drop.transform.localScale += Vector3(Time.deltaTime, Time.deltaTime,
                                                 Time.deltaTime);
            timeD +=Time.deltaTime;
     }
}

そして、これはUpdateへの多くの呼び出しの過程で発生する必要があります。

function Update () {
    if(Input.GetMouseButton(0)) {
        // This means the left mouse button is currently down,
        // so we'll augment the scale            
        drop.transform.localScale += Vector3(Time.deltaTime, Time.deltaTime,
                                             Time.deltaTime);
    }
}
于 2011-04-01T04:38:22.493 に答える
1

最も簡単な方法 (c#) は次のようになります。

[RequireComponent(typeof(Collider))]
public class Cloneable : MonoBehaviour {
    public Vector3 spawnPoint = Vector3.zero;

    /* create a copy of this object at the specified spawn point with no rotation */
    public void OnMouseDown () {
        Object.Instantiate(gameObject, spawnPoint, Quaternion.identity);
    }
}

(最初の行は、オブジェクトにアタッチされたコライダーがあることを確認するだけで、マウスのクリックを検出するために必要です)

そのスクリプトはそのまま動作するはずですが、まだテストしていません。動作しない場合は修正します。

于 2011-10-04T12:37:33.093 に答える
0

スクリプトがGameObject(たとえば、球)にアタッチされている場合は、次のように実行できます。

public class ObjectMaker : MonoBehaviour
{
    public GameObject thing2bInstantiated; // This you assign in the inspector

    void OnMouseDown( )
    {
        Instantiate(thing2bInstantiated, transform.position, transform.rotation);
    }
}

Instantiate()に3つのパラメータを指定します:どのオブジェクト、どの位置、どのように回転するか。

このスクリプトが行うことは、このスクリプトがアタッチされているGameObjectの正確な位置と回転で何かをインスタンス化することです。多くの場合、GameObjectからコライダーを削除する必要があります。リジッドボディがある場合は削除する必要があります。インスタンス化の方法にはさまざまなバリエーションがあるため、これが機能しない場合は、別の例を示します。:)

于 2012-06-21T20:28:07.130 に答える