2017-04-19 1 views
0

私は現在プログラミングを始めています。加速度計でボールを移動/ロールバックする

私はUnityのゲームエンジンから始めました。人々はそれが何かを始めるには最良の方法ではないと言います。

私は基本的な統一チュートリアルで最初のゲームを作った。

私はまだC#の複雑さを本当に理解できません。 (Visual Studioを使用して、私が昇華と方法に切り替える必要があるかどうかわからない)

このゲームでは、ボールを動かして物を集めることについてです。 PCでは、矢印キーのAddForceとVector3の動きでうまく動作します。このゲームをモバイルデバイス用にしようと思っていましたが、私はモバイルデバイスのジャイロスコープを使用するかもしれない画面を入力する代わりに考えました。私はUnity APIのドキュメントで "ジャイロ"変数(?)を見つけましたが、x軸とz軸を動かすだけの方法を定義していないので、ボールはテーブルから飛び出しません。 (?)私は、アクセル変数でみましたが、まさにこれは、y軸が0 次のコードに設定されていてもカントー、起こった私は、これまでのゲームオブジェクトで「プレーヤー」を持っているものです。

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 

public class AccelerometerInput : MonoBehaviour 
{ 


public float speed; 
public Text countText; 
public Text winText; 

private Rigidbody rb; 
private int count; 

void Start() 
{ 
    rb = GetComponent<Rigidbody>(); 
    count = 0; 
    SetCountText(); 
    winText.text = ""; 
} 

private void Update() 
{ 
    transform.Translate(Input.gyro.x, 0, -Input.gyro.z); 
} 
void FixedUpdate() 
{ 
    float moveHorizontal = Input.GetAxis("Horizontal"); 
    float moveVertical = Input.GetAxis("Vertical"); 

    Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); 

    rb.AddForce(movement * speed); 
} 

void OnTriggerEnter(Collider other) 
{ 
    if (other.gameObject.CompareTag("Capsule")) 
    { 
     other.gameObject.SetActive(false); 
     count = count + 1; 
     SetCountText(); 
    } 
} 
void SetCountText() 
{ 
    countText.text = "Count: " + count.ToString(); 
    if (count >= 8) 
    { 
     winText.text = "You Win"; 
    } 
} 

} 

私は」このすべてのこと、特にコーディングでは、言語がどのように解釈されるかを理解するのに役立つものはどれも非常に高く評価されます。 ありがとうございました!

+1

あなたを助けプログラマーを持って幸運です! Unityを楽しむ、それは楽しいです – Fattie

+1

@Fattie Joeは正しいですか?あなたはあなたの名前を変更しましたか? – Programmer

+1

私は@プログラムをしました - 私はあなたのニックネームを変更することはできませんでした! – Fattie

答えて

3

私はUnityのゲームエンジンで始まりましたが、人々はそれが最高ではないと言います。 しかし何でも始めてください。

そうです。多くのC#チュートリアルがオンラインです。基本的なC#のことだけを理解すれば、Unityでうまくいくはずです。これをしないと、Unityでできることに制限があります。

あなたの質問にお答えするには、ジャイロセンサではなく、加速度計が必要です。また、更新機能からtransform.Translate(Input.gyro.x, 0, -Input.gyro.z);を削除します。 transform.Translateまたは他経由Rigidbodyない移動オブジェクトを行います、あなたは、このような無衝突などの問題に実行されます。このような

何かがそれを行う必要があります。

Vector3 movement = new Vector3(-Input.acceleration.y, 0f, Input.acceleration.x); 

あなたはまだあなたがモバイルデバイスやデスクトップ用に構築されているかどうかを検出する方法が必要です。これは、Unityのプリプロセッサdirectivesで行うことができます。

void FixedUpdate() 
{ 
    Vector3 movement = Vector3.zero; 

    //Mobile Devices 
    #if UNITY_IOS || UNITY_ANDROID || UNITY_WSA_10_0 
    movement = new Vector3(-Input.acceleration.y, 0.0f, Input.acceleration.x); 
    #else 
    //Desktop 
    float moveHorizontal = Input.GetAxis("Horizontal"); 
    float moveVertical = Input.GetAxis("Vertical"); 
    movement = new Vector3(moveHorizontal, 0f, moveVertical); 
    #endif 

    rb.AddForce(movement * speed); 
} 
+0

どうもありがとう! <3 –

関連する問題