斉藤さんの「視線」が気になったので、話者の方をチラッとするようにしてみました。
新規スクリプト Sys_EyeToggle
通常はカメラ目線です。

話者が変わってキャラクターが並ぶと、なんか違和感を感じる。
目力が凄いので見られてる感がでるのかな。


話者を見てくれるおかげで、なんかの違和感はなくなったような気がします。

仕掛けは単純で、都度アクティブ非アクティブで切り替えているだけです。
キャラクタープレハブの中の「目パチ」を増やして、「Default」と「Gaze」の2種類を配置しています。

「Saito_Eyes」などと視線オブジェクトを、必要なCut内に置いて制御しているので、
キャラクター数やCut数が多くなると破綻する方法です。
今回は斉藤さんだけで、そこまで手間ではないので都度設置型にしましたが、
将来的には例のごとく管理マネージャーを作った方がよいかもしれません。
今回のことで、
現場には「カメラマンもいる」という設定もありだなと思ったので、良い収穫でした。
改善★0515 視線切り替え時の瞬きリセット
■ 課題と解決策
課題:
Sys_EyeToggle でオブジェクトを切り替えた際、
Sys_Random_3Anime の状態が「半目」や「閉じ目」で止まってしまい、不自然な表情が維持される。
解決策:
オブジェクトの有効化(SetActive)と同時に、
アニメーションの状態を強制的に「1枚目(開目)」に引き戻す処理を追加。
■ 技術的アプローチ
- コルーチンの制御:
瞬き実行中の IEnumerator を StopCoroutine で強制終了させ、タイマーとスプライトを初期状態へ上書きします。 - 安全なコンポーネント参照:
GetComponent<T>()?.Method()(Null条件演算子)を使用。
対象オブジェクトに Sys_Random_3Anime がアタッチされていない場合でも、エラーを出さず処理をスキップする設計にしました。
■ 将来の拡張性
A. 表示制御の最適化(パフォーマンス向上)
現在は SetActive でGameObjectごと切り替えていますが、キャラクターが多い場合や頻繁に切り替える場合、負荷(GC Alloc)の原因になります。
提案:1つの SpriteRenderer を維持し、スクリプトから「表示するスプライトの配列(Default用 / Gaze用)」を差し替える方式に集約すると、より軽量に動作します。
B. ステートパターンの導入(表情の多様化)
今後「怒り」「悲しみ」など、目の種類が増える場合、現在の bool 的な切り替えでは管理が複雑になります。
提案:EyeState という基底クラスを作り、「通常時」「注視時」「ダメージ時」などの状態ごとに瞬きロジックを持たせることで、コードのスパゲッティ化を防げます。
C. 外部制御(タイムライン連携)
現在は Update 内のランダムタイマーのみで動いていますが、カットシーン(Timeline)で「ここで目をつぶらせたい」といった要望が出る可能性があります。
提案:ResetAnimation() と同様に、外部から強制的に瞬きを開始させる PlayBlinkOnce() のようなメソッドを用意しておくと、演出の自由度が上がります。

コメント