前提・実現したいこと
矢印キーを押すとボールが浮き上がり、それにカメラが追従するというスクリプトを書きたい。
発生している問題・エラーメッセージ
ボールが浮き上がり高さが安定していても、カメラがブレる。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Angular : MonoBehaviour 6{ 7 public float KAITEN;//回転する速さ 8 public float UKI;//ボールを浮かせる高さ 9 public GameObject cam;//メインカメラを代入 10 11 // Start is called before the first frame update 12 void Start() 13 { 14 15 } 16 17 // Update is called once per frame 18 void Update() 19 { 20 //カメラをボールの後ろに配置 21 if (cam.transform.position.x < 0) 22 { 23 Vector3 t = transform.position; 24 t.y += 4; 25 t.z -= 5; 26 cam.transform.position = t; 27 28 } 29 30 //ボールを浮かせて、さらに回転をかける 31 if (Input.GetKey(KeyCode.UpArrow)) 32 { 33 Vector3 p = transform.position; 34 p.y = UKI + 0.5f; 35 transform.position = p; 36 GetComponent<Rigidbody>().angularVelocity = new Vector3(KAITEN, 0, 0); 37 } 38 if (Input.GetKey(KeyCode.DownArrow)) 39 { 40 Vector3 p = transform.position; 41 p.y = UKI + 0.5f; 42 transform.position = p; 43 GetComponent<Rigidbody>().angularVelocity = new Vector3(-KAITEN, 0, 0); 44 } 45 if (Input.GetKey(KeyCode.RightArrow)) 46 { 47 Vector3 p = transform.position; 48 p.y = UKI + 0.5f; 49 transform.position = p; 50 GetComponent<Rigidbody>().angularVelocity = new Vector3(0, 0, -KAITEN); 51 } 52 if (Input.GetKey(KeyCode.LeftArrow)) 53 { 54 Vector3 p = transform.position; 55 p.y = UKI + 0.5f; 56 transform.position = p; 57 GetComponent<Rigidbody>().angularVelocity = new Vector3(0, 0, KAITEN); 58 } 59 60 61 62 } 63}
試したこと
「//カメラをボールの後ろに配置」のところをまるまる「//ボールを浮かせて、さらに回転をかける」の後にもっていくと、カメラがブレなくなりました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Angular : MonoBehaviour
{
public float KAITEN;//回転する速さ
public float UKI;//ボールを浮かせる高さ
public GameObject cam;//メインカメラを代入
// Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { //ボールを浮かせて、さらに回転をかける if (Input.GetKey(KeyCode.UpArrow)) { Vector3 p = transform.position; p.y = UKI + 0.5f; transform.position = p; GetComponent<Rigidbody>().angularVelocity = new Vector3(KAITEN, 0, 0); } if (Input.GetKey(KeyCode.DownArrow)) { Vector3 p = transform.position; p.y = UKI + 0.5f; transform.position = p; GetComponent<Rigidbody>().angularVelocity = new Vector3(-KAITEN, 0, 0); } if (Input.GetKey(KeyCode.RightArrow)) { Vector3 p = transform.position; p.y = UKI + 0.5f; transform.position = p; GetComponent<Rigidbody>().angularVelocity = new Vector3(0, 0, -KAITEN); } if (Input.GetKey(KeyCode.LeftArrow)) { Vector3 p = transform.position; p.y = UKI + 0.5f; transform.position = p; GetComponent<Rigidbody>().angularVelocity = new Vector3(0, 0, KAITEN); } //カメラをボールの後ろに配置 if (cam.transform.position.x < 0) { Vector3 t = transform.position; t.y += 4; t.z -= 5; cam.transform.position = t; } }
}
補足情報(FW/ツールのバージョンなど)
UnityのバージョンはUnity2019.2.6f1Personalです。
なぜ順番で処理が変わってしまうのか教えてほしいですお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。