前提
Unity 3Dで、オブジェクトの移動速度の値に応じてアタッチしたMaterialの透明度を変化させるプログラムを実装しようとしています。
どうしてもエラーメッセージが出てしまい上手くいかないので知恵をお借りしたいです。
発生している問題・エラーメッセージ
Assets\Scripts\ChangeTransparency.cs(48,57): error CS1503: Argument 4: cannot convert from 'byte[]' to 'byte'
該当のソースコード
C#
1using System; 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6public class ChangeTransparency : MonoBehaviour 7{ 8 //オブジェクトの直前の位置を格納する変数 9 private Vector3 _prevPosition; 10 11 private MeshRenderer _mesh; 12 13 void Start(){ 14 //直前の位置を取得 15 _prevPosition = transform.position; 16 } 17 18 void Update(){ 19 20 //Time.deltaTimeが0に近似していれば何もしない 21 if(Mathf.Approximately(Time.deltaTime, 0)) 22 return; 23 24 //現在位置を取得 25 var position = transform.position; 26 27 //速度を計算 28 var velocity = (position - _prevPosition) / Time.deltaTime; 29 30 //xyz方向のうち最大の速さを取得 31 float MaxVel = Mathf.Max(Mathf.Abs(velocity.x), Mathf.Abs(velocity.y), Mathf.Abs(velocity.z)); 32 33 //透明度を変更 34 ChangeTransparency(MaxVel); 35 36 print($"velocity = {velocity}"); 37 38 //直前の位置を現在位置に更新 39 _prevPosition = position; 40 } 41 42 void ChangeTransparency(float vel){ 43 44 //速さが30.0以上なら完全に透明 45 if(vel > 30.0){ 46 _mesh.material.color = new Color32(0, 0, 0, 0); 47 } 48 49 //速さ30.0未満 50 else{ 51 52 //速度の値を0~1に正規化 53 var alpha = vel / 30.0; 54 55 //透明度をalphaの値で変化 [[質問したい点]] 56 _mesh.material.color = new Color32(0, 0, 0, BitConverter.GetBytes(alpha)); 57 } 58 }
試したこと
UnityEngine.Color32構造体の中身はbyte型なので、float型のalphaをbyte型に型変換して…という方向に持って行きたかったのが上のコードです。
しかしGetBytesメソッドだとbyte[]型に変換されてしまうため別のやり方を模索しています。
byte[]型からbyte型に変換する手法も調べましたが、これといったものは見つかりませんでした。

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/08/04 09:35
2022/08/05 02:16