Unity3DはUI画像をクリックして、モデルプリセットを生成します

                        Unity3DはUI画像をクリックして、モデルプリセットを生成します


目次

1.ブログ紹介

2.コンテンツ

(1)デモ

(2)生成

(3)オブジェクトの動きを生成する

 3.プッシュ

4.結論


1.ブログ紹介

2年前に前回のデモが判明し、引き渡されました。モデルのプリセットは、ボタンやその他のUI要素をクリックし、マウスで移動することで生成されます。


2.コンテンツ

(1)デモ

(2)生成

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class ClickButton : MonoBehaviour {

    public GameObject Cube;

    public GameObject Target;

    private Button _btnCreate;


	void Start () {

	    _btnCreate = GameObject.Find("Button").GetComponent<Button>();
		_btnCreate.AddListener(EventTriggerType.PointerDown,OnDownButton);

	}

    public void OnDownButton(BaseEventData baseEventData)
    {
        GameObject cubePre = Instantiate(Cube);
	    if (Camera.main != null)
	    {
		    Vector3 targetSpace = Camera.main.WorldToScreenPoint(Target.transform.position);
		    cubePre.transform.position= Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, targetSpace.z));
	    }
    }
}

スクリプトを生成するとき、注意すべき唯一のポイントは、マウスの画面座標をワールド座標に変換するときに、Z値がシーン内のオブジェクトを参照値として選択することです。オブジェクトの座標は画面座標に変換する必要があります。 、次に回転したZ値の組み合わせのマウスクリック位置がワールド座標に変換されます。

(3)オブジェクトの動きを生成する

using UnityEngine;
using System.Collections;

public class CubeDragScript : MonoBehaviour {

	// Use this for initialization
	void Start () {
       
        StartCoroutine(OnMouseDown());
    }
	

    IEnumerator OnMouseDown()
    {
        if (Camera.main != null)
        {
            //三维物体世界坐标转屏幕坐标  
            Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position);

            //完成两个步骤 1.由于鼠标的坐标系是2维,需要转换成3维的世界坐标系  

            //            2.只有3维坐标情况下才能来计算鼠标位置与物理的距离,offset即是差值

            //将鼠标屏幕坐标转为世界三维坐标,转换前的屏幕Z值套用Cube转换过得Z值,再算出Cube世界坐标与鼠标世界坐标的差值

            Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z));
        
            while (Input.GetMouseButton(0))

            {
           
                Camera.main.GetComponent<MouseOrbit>().enabled = false;
                
                //得到现在鼠标的屏幕坐标
                Vector3 curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z);

                //物体的位置就是鼠标的世界坐标 + 差值
                Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset;

                transform.position = curPosition;
                //这个很重要,循环执行
                yield return null; 

            }
        }

        if (Camera.main != null) Camera.main.GetComponent<MouseOrbit>().enabled = true;
    }



}

コメントは非常に明確です。コードを見てください。MouseOrbitスクリプトはレンズの回転を制御します。オブジェクトをドラッグすると無効になります。ブロガーのGithubにジャンプするには、ソースコードとデモシーンが必要です。


 3.プッシュ

工程Github:https//github.com/KingSun5/Demo_UICreateObj


4.結論

       ブロガーの記事がよく書かれていると思われる場合は、ブロガーに注意を払い、ブログ投稿を気に入ってください。また、ブロガーの能力は限られています。記事に誤りがある場合は、コメントして批判してください。 。

       QQ交換グループ:806091680(中国人)

       このグループは、CSDNブロガーのChinarによって作成されました。お勧めします。私もグループにいます!

       この記事はオリジナル記事ですので、有名作家の出典を転載してトップにこだわってください!

おすすめ

転載: blog.csdn.net/Mr_Sun88/article/details/94507384