(4B) raycast
무언가에 부딪치면 천천히 사라지는 스크립트를 만들어야 할 때의 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로 보관, 혹은 값의 세이브 방법
Reference
이 문제에 관하여((4B) raycast), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/egiheiIsono/items/4a30aca579b6825e1c38
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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);
}
}
this.transform.position = hit.point;
Reference
이 문제에 관하여((4B) raycast), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/egiheiIsono/items/4a30aca579b6825e1c38텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)