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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Unity

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

Q&A

0回答

1197閲覧

キャラクターコントローラーで敵を動かしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

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

0グッド

0クリップ

投稿2020/01/09 01:07

現状

本を参考に自分にキャラクターコントローラーでキャラ動かしている
敵に当たると自分は動かされるが敵の事は動かせないしぶつかっても煙出ない
キャラクターコントローラーとボックスコリダーをつけている
###実現したいこと
敵に当たると敵を動かしたい
キャラクターコントローラー以外で似た動きができるならそちらに変えたいので教えてもらいたい(現在の動きは矢印かフリックで左右のレーンに移動)

該当コード

unity

1コード 2public class PlayerCotroller : MonoBehaviour 3{ 4 private Vector3 touchStartPos;//タッチされた位置 5 private Vector3 touchEndPos;//離した位置 6 const int MinLane = -2;//最小レーン 7 const int MaxLane = 2;//最大レーン 8 const float LaneWidth = 1.0f;//レーン幅 9 public float gravity = 10.0f;//重力 10 public GameObject smoke;//煙 11 CharacterController controller; 12 GameObject scrollObjects; 13 14 Vector3 moveDirection = Vector3.zero; 15 int targetLane; 16 17 public float speedX = 4.0f;//横移動スピード 18 19 // Start is called before the first frame update 20 void Start() 21 { 22 controller = GetComponent<CharacterController>();//キャラコントローラー取得 23 scrollObjects = GameObject.FindWithTag("ScrollObject"); 24 } 25 26 // Update is called once per frame 27 void Update() 28 { 29 //フリック入力(スマホ用) 30 Flick(); 31 //矢印入力(PC用) 32 if (Input.GetKeyDown("right")) MoveToRight(); 33 if (Input.GetKeyDown("left")) MoveToLeft(); 34 if (Input.GetKeyDown("space")) MoveToTouch(); 35 36 //X方向は目的のポジションまでの差分の割合で速度計算 37 float ratioX = (targetLane * LaneWidth - transform.position.x) / LaneWidth; 38 moveDirection.x = ratioX * speedX; 39 40 moveDirection.y -= gravity * Time.deltaTime;//重力加える 41 42 //移動実行 43 Vector3 gloabalDirection = transform.TransformDirection(moveDirection); 44 controller.Move(gloabalDirection * Time.deltaTime); 45 } 46 47 void Flick() 48 { 49 if (Input.GetKeyDown(KeyCode.Mouse0))//タップされたとき 50 { 51 touchStartPos = new Vector3(Input.mousePosition.x,//タップ位置 52 Input.mousePosition.y, Input.mousePosition.z); 53 } 54 if (Input.GetKeyUp(KeyCode.Mouse0))//離されたとき 55 { 56 touchEndPos = new Vector3(Input.mousePosition.x, 57 Input.mousePosition.y, Input.mousePosition.z);//離した位置 58 GetDirection(); 59 } 60 } 61 62 void GetDirection() 63 { 64 float directionX = touchEndPos.x - touchStartPos.x;//x距離 65 float directionY = touchEndPos.y - touchStartPos.y;//y距離 66 string Direction; 67 68 if (Mathf.Abs(directionY) < Mathf.Abs(directionX)) 69 { 70 if (30 < directionX) 71 { 72 //右フリック 73 Direction = "right"; 74 } else if (-30 > directionX) 75 { 76 //左フリック 77 Direction = "left"; 78 } 79 else 80 { 81 //タッチ 82 Direction = "touch"; 83 } 84 85 switch (Direction) 86 { 87 case "right": 88 MoveToRight(); 89 break; 90 case "left": 91 MoveToLeft(); 92 break; 93 case "touch": 94 MoveToTouch(); 95 break; 96 } 97 } 98 } 99 public void MoveToRight() 100 { 101 if (controller.isGrounded && targetLane < MaxLane) targetLane+=2;//右レーンに移動 102 } 103 public void MoveToLeft() 104 { 105 if (controller.isGrounded && targetLane > MinLane) targetLane-=2;//左レーンに移動 106 } 107 public void MoveToTouch() 108 { 109 scrollObjects.SendMessage("StartOrStop"); 110 } 111 112 public void OnCollisionEnter(Collision collision) 113 { 114 //ぶつかったらスモークオン 115 smoke.SetActive(true); 116 } 117}

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問