質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Oculus Rift

Oculus Riftは、ゲームに特化した広視野角バーチャルリアリティヘッドマウントディスプレイ です。そのため、バーチャルリアリティ・ゲームで使用するのを第一目的として開発されています。

Q&A

2回答

1012閲覧

ボタンを押すと、アバターが動くようにしたいです。

Miya41933

総合スコア4

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Oculus Rift

Oculus Riftは、ゲームに特化した広視野角バーチャルリアリティヘッドマウントディスプレイ です。そのため、バーチャルリアリティ・ゲームで使用するのを第一目的として開発されています。

0グッド

0クリップ

投稿2020/11/18 09:10

前提・実現したいこと

Vroidのアバターに、unityちゃんのモーションをつけています。
unity上の「拒否する」というボタンを押すと、LOSE00のモーションが一度再生される、「承認する」というボタンを押すと、WIN00のモーションが一度再生される、という感じにしたいです。
現在、Int型として、ConditionsにおいてLOSE00を「1」、WIN00を「2」に設定しています。
ちなみに、Oculus Lift sと連動しています。
おそらく、モーションとスクリプトが繋げられていないと思うので、スクリプトを教えていただきたいです。
unity歴が浅いので、丁寧に教えてくれるとありがたいです。
宜しくお願い致します。

発生している問題・エラーメッセージ

エラーメッセージ

Null Reference Exception : Object reference not set to an instance of an object

該当のソースコード

using System; using System.Text; using System.IO; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Manager_A : Root { public Text text_point; public Text point_you; public Text point_opponent; public Text text_intro; public Text waitmsg; public Text distmsg; public Button btn_yes; public Button btn_no; public Transform btn_next; private int count; private int[,] value = new int[7,2] { {900,100}, {800,200}, {700,300}, {500,500}, {300,700}, {200,800}, {100,900} }; private int judge; private Strategy stg = new Strategy(); private Func<int, int, int> gamestg; //private int Root.stgnumber; private int points; private int valuenum; private int[] waittime = new int[3]{5,10,15}; private int wt; private StreamWriter sw; private Animator animator; // Start is called before the first frame update void Start() { count = 0; points = 0; valuenum = 3; Func<int, int, int> r = stg.Random; Func<int, int, int> p = stg.Pavlov; Func<int, int, int> s = stg.Selfish; Func<int, int, int> a = stg.Altruistic; Func<int, int,int>[] stgs = new Func<int, int, int>[4] { r, p, s, a }; //拒否確率はrootで指定。 //Root.stgnumber = UnityEngine.Random.Range(0,4); gamestg = stgs[Root.stgnumber]; //waitmsg.enabled = false; //btn_next.gameObject.SetActive(false); text_intro.enabled = false; btn_yes.GetComponent<Button>().enabled = true; btn_no.GetComponent<Button>().enabled = true; StartCoroutine(NextGame()); Animator animator = GetComponent<Animator>(); } // Update is called once per frame void Update() { } public void onClick_y() { points += value[valuenum,0]; judge = 0; ExportCsv(); distmsg.text = "成立です。おめでとうございます。\n報酬を受け取ることができます。"; Result(); { animator.SetInteger("Motion", 2); } } public void onClick_n() { judge = 1; ExportCsv(); distmsg.text = "不成立です。\n報酬を獲得することができませんでした。"; Result(); { animator.SetInteger("Motion", 1); }

試したこと

private Animator animator;
{
animator.SetInteger("Motion", 2);
}
の二つを勝手につけていますが、間違いがあれば、ご指摘おねがいします。

補足情報(FW/ツールのバージョンなど)

unityは2018,4,12f1のバージョンです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

どれがNullになってるかわかりませんが、Animatorの参照が取れてないのかもしれません
デバッグログで参照が取れているかを確認してみるのが良いでしょう。

cs

1 void Start() 2 { 3 count = 0; 4 points = 0; 5 valuenum = 3; 6 Func<int, int, int> r = stg.Random; 7 Func<int, int, int> p = stg.Pavlov; 8 Func<int, int, int> s = stg.Selfish; 9 Func<int, int, int> a = stg.Altruistic; 10 Func<int, int,int>[] stgs = new Func<int, int, int>[4] { r, p, s, a }; 11 //拒否確率はrootで指定。 12 //Root.stgnumber = UnityEngine.Random.Range(0,4); 13 gamestg = stgs[Root.stgnumber]; 14 15 //waitmsg.enabled = false; 16 //btn_next.gameObject.SetActive(false); 17 text_intro.enabled = false; 18 btn_yes.GetComponent<Button>().enabled = true; 19 btn_no.GetComponent<Button>().enabled = true; 20 21 StartCoroutine(NextGame()); 22 Animator animator = GetComponent<Animator>(); 23 Debug.Log(animator); // <---------------------------------- 参照確認 24 }

あとはクリップ単体で再生するだけでいいなら
animator.Play("クリップ名")で直接モーションを叩くこともできます。animator.CrossFade("クリップ名");でクロスフェードしてアニメーションを移行することもできます。
スクリプト側で明確に利用したいクリップが決まっているならそういうアプローチも可能です。

投稿2020/11/19 00:40

hogefugapiyo

総合スコア3302

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

private Animator animator;

[SerializeField] private Animator animator;

に変えてインスペクターからanimatorに割り当てるアニメーターを設定するとどのアニメーターがスクリプトに割り当てられているのかわかりやすいのでお勧めです
あとアニメーションをするときはint型よりはbool型やtrigger型の変数のほうがわかりやすいし楽にするのならこちらのほうがいいかもしれません
アニメーションが動いていたのなら大丈夫かもしれませんが
ひとまず試してみるのが良いかもです

投稿2020/11/18 13:51

CraftTable

総合スコア234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問