前提・実現したいこと
Unityで他のオブジェクトを追従するプログラムを作っています。
やりたいことのイメージとしてはGameObjectにあるCylinderのyの回転を基にGameObjectのCylinder(1)をやや時間差で回転させることです。
また、現在Start関数を用いていますが本当は毎フレームごとに操作をしたいと考えています。
Follow.csでコメントアウトしているような自作関数を用いるとDebug.Logも何も表示されなくなります。(エラーは出ていません)
こちらについても原因がわからないので何かご存じの方がいましたら教えてください。
発生している問題・エラーメッセージ
エラーは出ていませんが変数の値を取得できていません。
現在実装しているコードを記載します。
該当のソースコード
基準
CyrinderRotation.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class CyrinderRotation : MonoBehaviour { public float old_angle = 0; public string GetServoAngle() { var rb = GetComponent<Rigidbody>(); //gameObject.transform.localEulerAngles;//オブジェクトの回転座標取得 //return $"{ConvertPitch(transform.localEulerAngles.x)},{ConvertYaw(transform.localEulerAngles.y)}"; //transform.rigidbody.constraints = RigidbodyConstraints.FreezePosition; old_angle = transform.localEulerAngles.y; //y方向の回転取得、この回転を基にもう一つのオブジェクトを操作 //Debug.Log(old_angle); //ログ確認 return $"{transform.localEulerAngles.y}"; }
2つ目のオブジェクト(1つめを基に回転する方)
Follow.cs
CyrinderRotate.csのGetServoAngle関数のold_amgle(変数)をvirtual_y_angleに代入して制御をしたい
Follow.csのインスペクターにScript、GameObject、CyrinderRotationが存在している
GameObjectにCylinderをアタッチ
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class Follow : MonoBehaviour { public GameObject GameObject; public CyrinderRotation cyrinderRotation; GameObject Cylinder; CyrinderRotation script; float virtual_y_angle = 0; //基となる円柱の角度 float sub_angle = 0; //追従する円柱の角度 float Difference = 0; //両方の角度差 float new_angle = 0; //追従する円柱に入力する角度 //追従する円柱の角度を決める関数、Start関数で動作確認しているが毎フレーム動作させたい //public string kansuu() //public void kansuu() //void update() void Start() { var rb = GetComponent<Rigidbody>(); Cylinder = GameObject.Find("Cylinder"); script = GameObject.GetComponent<CyrinderRotation>(); //script = GameObject.Cylinder.GetComponent<CyrinderRotation>(); virtual_y_angle = script.old_angle; //基本となる円柱の角度(old_angle)をvirtual_y_angleに代入 sub_angle = transform.localEulerAngles.y; Debug.Log(sub_angle); Debug.Log(virtual_y_angle); // /* //ここで2つめの円柱に代入する角度を計算 if (sub_angle > virtual_y_angle) { Difference = sub_angle - virtual_y_angle; new_angle = sub_angle - 0.2 * Difference; transform.rotation = Quaternion.Euler(new Vector3(0, new_angle, 0)); //ここで角度代入 } if(virtual_y_angle > sub_angle) { Difference = virtual_y_angle - sub_angle; new_angle = sub_angle + 0.2 * Difference; transform.rotation = Quaternion.Euler(new Vector3(0, new_angle, 0)); //ここで角度代入 } Debug.Log(Difference); Debug.Log(new_angle); } }
試したこと
ネットの記事を参考に書いてみましたがうまくいっていません。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー