code VR

Unity×VR(4)

スポンサーリンク

//tips

//カメラから例を飛ばしEthanを移動させる

AIをランダム移動させるのではなく、カメラから飛ばすレイの方向に移動させる。

Walktargetの新しいスクリプトを作成。

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

public class LookMoveTo : MonoBehaviour
{
public GameObject ground;

void Update()
{
Transform camera = Camera.main.transform;
Ray ray;
RaycastHit hit;
GameObject hitobject;

Debug.DrawRay(camera.position, camera.rotation * Vector3.forward * 100.0f);

ray = new Ray(camera.position, camera.rotation * Vector3.forward);
if (Physics.Raycast(ray, out hit))
{
hitobject = hit.collider.gameObject;
if (hitobject == ground)
{
Debug.Log("Hit(x,y,z):" + hit.point.ToString("F2"));
transform.position = hit.point;

}

}

}
}

カメラがどの方向を向いているのかを読み取り、読み取った方向にレイを飛ばし、rayとgroundとの衝突位置情報を取得、そこをWalkTargetに設定する。

レイは原点 から、設定した方向に向けて光線 を無限に飛ばすことができ、
ray = new Ray(camera.position, camera.rotation * Vector3.forward);
により光線の方向を設定。

Physics.Raycastでは、飛ばすレイとレイが衝突したオブジェクトをhitがセットされる。

Debug.DrawRay()はレイをシーンに描画する。

Walk targetの位置が透明だとわかりづらいので見えるようにしていく。

Walk targetの子要素にCylinderを作成。 見やすいサイズにscaleを変更し、インスペクターのcapture colliderも外しておく。

さらに、不要なmesh rendererでcash shadows, receive shadows, use light probes, reflectionをオフにし、マテリアルで色付けする。

目印をtargetに組み込みEthanを動かしていると、障害物周りでの挙動でよく詰まるのを見かける。

これはif (hitobject == ground)で条件を課しているからだとわかる。

Physics.RaycastAllを用いて、衝突した情報のリストを取り出し、その中から地面に衝突したものを選び出す。

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

public class LookMoveTo : MonoBehaviour
{
public GameObject ground;

void Update()
{
Transform camera = Camera.main.transform;
Ray ray;
RaycastHit[] hits;
GameObject hitobject;

Debug.DrawRay(camera.position, camera.rotation * Vector3.forward * 100.0f);

ray = new Ray(camera.position, camera.rotation * Vector3.forward);

hits = Physics.RaycastAll(ray);

for (int i = 0; i < hits.Length; i++)
{
RaycastHit hit = hits[i];
hitobject = hit.collider.gameObject;

if (hitobject == ground)
{
Debug.Log("Hit(x,y,z):" + hit.point.ToString("F2"));
transform.position = hit.point;

}

}
}

}

//Ethanをハンティングする

レイの仕組みを利用すればEthanを攻撃することもできるようになるので、そちらも作成していく。

GameControllerを作成し、KillTargetというスクリプトをアタッチし、動きを作っていく。

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

public class KillTarget : MonoBehaviour
{
public GameObject target;
public ParticleSystem hitEffect;
public GameObject killEffect;
public float timeToselect = 3.0f;
public int score;

private ParticleSystem.EmissionModule hitEffectEmission;
private float countDown;

void Start()
{
score = 0;
countDown = timeToselect;
hitEffectEmission = hitEffect.emission;
hitEffectEmission.enabled = false;

}

void Update()
{
Transform camera = Camera.main.transform;
Ray ray = new Ray(camera.position, camera.rotation * Vector3.forward);
RaycastHit hit;
if(Physics.Raycast(ray,out hit) && (hit.collider.gameObject == target))
{
if(countDown > 0.0f)
{
countDown -= Time.deltaTime;
hitEffect.transform.position = hit.point;
hitEffectEmission.enabled = true;

}
else
{
Instantiate(killEffect, target.transform.position, target.transform.rotation);
score += 1;
countDown = timeToselect;
hitEffectEmission.enabled = false;
}

}

}

void SetRandomPosition()
{
float x = Random.Range(-5.0f, 5.0f);
float z = Random.Range(-5.0f, 5.0f);
target.transform.position = new Vector3(x, 0.0f, z);
}
}

人気の記事

1

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

4

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-code, VR
-,

Copyright© BUSINESS HACKER , 2020 All Rights Reserved Powered by AFFINGER5.