code VR

Unity×VR(105)

スポンサーリンク

//tips

//キャラクターUI整備

Mooseの人狼側のUI機能を実装していく。

攻撃後相手を一定時間停止させる機能を考える。EnvPlaymove4スクリプトの移動速度を変化させるrabbitspeedup変数を利用して、相手側のrb.position = transform.position + transform.forward * 10.0f * Time.deltaTime * rabbitspeedup * wolfspeed;を一定時間0にする。

public void Moosestop()
{
StartCoroutine("Moosestopon");
}

IEnumerator Moosestopon()
{
rabbitspeedup = 0;
yield return new WaitForSeconds(2);
rabbitspeedup = 1;
}

これを接触感知した相手側に実行させれば良いのでMooseAttackManagerスクリプトに下記を追加する。

if (stopmoose)
{
envPlaymove4 = other.gameObject.GetComponent<EnvPlaymove4>();
envPlaymove4.Moosestop();
stopmoose = false;
}

public void Stopfunc()
{
stopmoose = true;
}

次は範囲攻撃の実装を行う。以前作成した範囲接触を感知できるレイをうまく活用していく。using System.Linq;をMooseAttackManagerスクリプトに追加し、下記の修正を追加。範囲5の領域を持つ球形のレイを飛ばし、レイ内部のオブジェクトの情報を取得する。

public void GetTargetRay()
{
float search_radius = 5f;

var hits = Physics.SphereCastAll(transform.position, search_radius, transform.forward, 0.01f).Select(h => h.transform.gameObject).ToList();

if (0 < hits.Count())
{
foreach (var hit in hits)
{
Debug.Log(hit);
if (hit.tag == "Player" && hit != ParentObject)
{
decoy = hit.GetComponent<Decoy>();
decoy.hp -= powerEnemy;
}
}

}
}

今度はDeerのキャラクターUIを作成していく。初期設定と各種モーションをアタッチし、DeerAtackManagerスクリプトを作成する。最初のスキルは感知機能のminimapを利用するためEnvPlaymove4スクリプトを使用。

2つ目のスキルはdeer自体を透過させる機能を実装する。過去に作成したTransparentEffectスクリプトをアタッチして試そうとしたが、導入したdeer本体にはrenderがないので、deerの子要素に格納されていたdeermeshで透過させられないか調整する。

color = GetComponent<SkinnedMeshRenderer>().material.color;でコンポーネントを取得しようとしたがエラーは起きないが色の変化なし。

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

public class MeshTransparentEffect : MonoBehaviour
{
Color color;

void Start()
{
color = GetComponent<SkinnedMeshRenderer>().material.color;
OnTransparent();
}

public void OnTransparent()
{
StartCoroutine("TransparentEffectOn");
Debug.Log("OnTransparent()");
}

IEnumerator TransparentEffectOn()
{
// 繰り返し回数
int loopcount = 10;

float waitsecond = 0.5f;

float offsetcolor = 1.0f / loopcount;
// 更新値
float updatecolor = 1;

// オブジェクトの有効化
color.a = 1;

for (int loop = 1; loop < loopcount; loop++)
{
Debug.Log(loop);
// スケール更新
updatecolor = updatecolor - offsetcolor;
color.a = updatecolor;
GetComponent<SkinnedMeshRenderer>().material.color = color;

yield return new WaitForSeconds(waitsecond);
}
// 最終
yield return new WaitForSeconds(1);
color.a = 1;
GetComponent<SkinnedMeshRenderer>().material.color = color;
}
}

Shaderのrendermodeを変更したら、opaqueから変更すると常に透過状態となることをうまく利用できないか考える。

いろいろなサイトを参考に下記のような形態を利用してrendermodeを変更できることがわかってきた。細かい値を指定しないとmodeの変更はできないよう。継続して調べていく。

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

public class MeshTransparentEffect : MonoBehaviour
{
public enum Mode
{
Opaque,
Cutout
}

public static void SetBlendMode(Material material, Mode blendMode)
{
material.SetFloat("_Mode", (float)blendMode);

switch (blendMode)
{
case Mode.Opaque:
material.SetOverrideTag("RenderType", "");
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_ZWrite", 1);
material.DisableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = -1;
break;
case Mode.Cutout:
material.SetOverrideTag("RenderType", "TransparentCutout");
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_ZWrite", 1);
material.EnableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = 2450;
break;
}
}

public void CutoutMode()
{

}

}

 

人気の記事

1

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

2

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

3

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

4

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

5

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

-code, VR
-,

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