(4B) raycast

8606 단어 C# 입문Unity3D

무언가에 부딪치면 천천히 사라지는 스크립트를 만들어야 할 때의 raycast




public class Contact : MonoBehaviour
{
    //RaycastHitの「入れ物」
    RaycastHit hit;
    Vector3 iremono;
    //public float speed = 350.0f;
    int counta;

    void Start()
    {
    }
    void Update()
    {

        //最大のポイント
        //クリックしたら、クリック位置にRayを飛ばして色々物色
        if (Input.GetMouseButtonDown(0))
        {
            //elseの何もぶつかっていない時のマウス位置を取得用
            Vector3 pos = Input.mousePosition;

            //posにやや奥行を設定
            pos.z = 10.0f;

            //クリック位置にRayを発射!!
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            //rayの可視化(Sceneで見ないと出ない)
            float distance = 100; // 飛ばす&表示するRayの長さ
            float duration = 3;   // 表示期間(秒)
            Debug.DrawRay(ray.origin, ray.direction * distance, Color.red, duration, false);

            //Rayが当たったオブジェクトの情報を入れる箱
            RaycastHit hit = new RaycastHit();

            //rayにぶつかったら
            if (Physics.Raycast(ray, out hit))
            {
                counta++;
                // 複数クリック対策
                if (counta == 1)
                {
                    iTween.FadeTo(gameObject, iTween.Hash(
                    "alpha", 0,
                    "time", 2f,
                    "oncomplete", "Destroy",
                    "oncompletetarget", this.gameObject
                     ));

                    // Rayの衝突地点に、このスクリプトがアタッチされているオブジェクトを移動させる
                    this.transform.position = hit.point;

                    // コルーチンで一時停止
                    // StartCoroutine("ChangeTime");
                }
            }
            //rayに何もぶつかっていない場合はキューブを移動
            else
            {
                Vector3 newpos = Camera.main.ScreenToWorldPoint(pos);
                transform.position = newpos;
            }
        }
    }


private void Destroy()
{
    Destroy(gameObject);
}

    IEnumerator ChangeTime()
    {
        //赤色にする
        //gameObject.GetComponent<Renderer>().material.color = Color.red;

        //2秒停止
        yield return new WaitForSeconds(2);

        //自分を消す
        Destroy(this.gameObject);
    }
}

해결책



iTween.Fade 문제

포인트와 불명점



· Raycast 사용 (검증)
이것의 차이
・ScreenPointToRay
・ScreenToWorldPoint

· iTween 자산 사용 (검증)
혹시, 천천히 이동 가능? 할 수있는 일을 더 알고 싶습니다.

・이동시키는 부분(복원 검증)// Rayの衝突地点に、このスクリプトがアタッチされているオブジェクトを移動させる
this.transform.position = hit.point; 
이 부분이 transrate라고 잘 움직이지 않았다.
맞은 위치를 Vector3로 격납해 그 위치에 transrate 했다고 생각한다. .



・처음의 코루틴 처리
IEnumerator

・OnTriger(복원 검증)
그 전단에서, 충돌을 OnTriger로 취득해 Vector3에 격납해 사용하려고 했지만 안 되었다.
Vector3로 보관, 혹은 값의 세이브 방법

좋은 웹페이지 즐겨찾기