トップページgamedev
1002コメント397KB

【3Dゲームエンジン】Unity質問スレッド28 [無断転載禁止]©5ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2016/12/13(火) 22:34:52.47ID:X+rEJddk
3Dゲームエンジン「Unity」の質問に優しく答えるスレです。
質問・回答・お礼以外はスレチなので総合スレでどうぞ
Windows/Mac用。JavaScript/C#といった汎用言語を使用できるのが特徴です。
フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。
プラットフォームサポートはiPhone/iPod Touch/iPad、Mac、PC、Web、Wii、Xbox360、Android、PlayStation 3、PlayStation 4、PS Vita他

次スレは>>970を踏んだ方が建てること。ダメなら>>980>>990が建てて下さい。

■本スレ
【3Dゲームエンジン】Unity総合スレッド29
http://echo.2ch.net/test/read.cgi/gamedev/1481616486/

■Unity 2ch Wiki(まとめ、過去ログ、リンク集)
http://www24.atwiki.jp/unity2ch/

●リンク
・Unity(日本公式サイト)
http://unity3d.com/jp
・マニュアル
 http://docs.unity3d.com/ja/current/Manual/index.html
・チュートリアル
 http://unity3d.com/jp/learn/tutorials
・スクリプトリファレンス
 http://docs.unity3d.com/ja/current/ScriptReference/index.html
・FAQ
 http://unity3d.com/jp/unity/faq
・MSDN
 http://msdn.microsoft.com/ja-jp/ms348103←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。

前スレ
【3Dゲームエンジン】Unity質問スレッド27
http://echo.2ch.net/test/read.cgi/gamedev/1477131311/
0002名前は開発中のものです。2016/12/14(水) 08:49:27.64ID:rfvEIMgQ
こつちはキチガイ用?
0003名前は開発中のものです。2016/12/16(金) 14:50:52.94ID:8f8SSfqY
ワッチョイにしろや無能
0004名前は開発中のものです。2016/12/17(土) 03:11:48.77ID:6UFyvISI
>>3
ワッチョイスレは板設定上立てられない
ここで導入するように言ってくれ
■ ゲーム製作技術板自治04
http://echo.2ch.net/test/read.cgi/gamedev/1469698797/
0005名前は開発中のものです。2016/12/22(木) 11:11:29.21ID:zojU7DGn
unity内に表示されているスフィア(sphere01)をキーボードの方向キーを使って動かしたいです。
動かし方としては方向キーを押してる間回って、離すと止まるようにしたいです。
下のようにとりあえず、右に動かせるように書いてみたんですけど、どうにも上手くいきません、どうしたら動くようになりますか?

それと今のこのプログラミングですと、方向キーを押してもまったく反応しません。


using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class move : MonoBehaviour
{

void Start()
{

}
void Update()
{
if (Input.GetKey(KeyCode.DpadRight))//キーボード
{
Transform.Rotate(Vector3.right * Time.deltaTime);
}
}
0006名前は開発中のものです。2016/12/22(木) 14:59:50.92ID:rhwSICsF
いま、どんな動きしてるの?
0007名前は開発中のものです。2016/12/22(木) 15:00:27.60ID:rhwSICsF
あ、反応しないのか。
そのスクリプトはスフィアに貼ってある?
0008名前は開発中のものです。2016/12/22(木) 17:05:34.46ID:zojU7DGn
>>7
エラーだらけで、貼る以前に動かない事になっています・・・



public class move : MonoBehaviour
(move)

void Start()
(Start)

void Update()
(Update)

(Transform.Rotate)


()でくくってある部分が赤い線が出てエラーになっています。

後、コントローラーの操作になってしまっていたので
if (Input.GetKey(KeyCode.RightArrow))//キーボード
に修正しました
0009名前は開発中のものです。2016/12/22(木) 17:23:43.57ID:WyFBB39K
C#って、関数名は先頭大文字がマナーなの?マジで?
0010名前は開発中のものです。2016/12/22(木) 20:01:43.06ID:k2kw0/7y
>>8
まさか、}の数合ってないんじゃね?
0011名前は開発中のものです。2016/12/22(木) 21:33:23.59ID:BFJhCrrC
>>9
変数名の最初が大文字っていうErlangよりはマシじゃん
あれだけは慣れない、言語自体は大好きなだけに悲しい

#他のObject指向言語から来るとC#のあれはきついけど
#慣れればどうと言う事は無いし、コンパイラから怒られるわけでもないのが救い(自分のコードなら小文字から初めても問題ない)
0012名前は開発中のものです。2016/12/22(木) 22:04:23.96ID:+BMlkn8e
>>8
見る限り2つのエラーがありそうだね
class moveが閉じてない。だから連鎖的にメンバの宣言でもメソッドはクラス内に置けとエラーが出る
Transform.Rotateはstaticではない。moveのメンバ変数であるtransformを使ってtransform.Rotate(.,.)と書くべし

なおキーボード入力の取得だがInput.GetAxis("Horizontal")で問題ないし、左右まとめて取れるからこっちの方が楽
ゲームパッドからの入力をさせたくなければInputManager側を弄ればいい
0013名前は開発中のものです。2016/12/24(土) 03:36:57.21ID:3ZtDDDzv
画面いっぱいに表示されるように作成したuGUIのWidthとじっきで実行したScreen.Widthの値が異なってしまいます。
XperiaZ5を使用しているのですが、
RectTransformのLeftとRightを0に設定した場合、数値が598
Screen.Widthが1080となっています。
片方はピクセルの数値で、もう片方は違う基準……みたいな感じかと想像しているのですが……よくわからず。
なぜ違う数値が出てきてしまうかご教示いただけませんでしょうか。
0014名前は開発中のものです。2016/12/25(日) 01:02:41.50ID:ITZMqT6/
http://qiita.com/Akematty/items/2fbb61b55132ced4a3be
上記サイトを参考にcsvから2次元配列に変換するスクリプトを作成しました。
ここで読み込んだstringデータをuGUIのテキストに表示させたいのですが、改行の仕方がわからず困っております。

元のCSVに下記のようにデータを入れているのですが……改行させるにはどうすればよいでしょうか

スライム,水属性\r\n弱い,
0015名前は開発中のものです。2016/12/25(日) 12:49:40.82ID:fKY3BO/3
>>14
csvには決まった文法はないけど、excelに合わせるなら、"で囲むと文字列、って判定させるんやで。

個人的には、今更パーサの自作ってのもナンセンスなので、
jsonutilty(unityのseralizableできる型限定、かつscriptableobjectはデフォでは参照しか出力せず)か
サードアセットで適当なjsonパーサ追加して、
一旦jsonテキスト出して読みやすいよう改行だけ追加した方が汎用性高い気がする。
いい感じのyamlパーサがあればそっちでもいい。
0016名前は開発中のものです。2016/12/26(月) 09:41:46.29ID:T8JOgdFL
>>14
データ文字列の中にカンマが含まれない前提であれば
分割した個々の文字列に対してstring.Replace(@”\r\n","\r\n")とかしとけはいい

ただしこれはかなりテキトーな実装なのでExcelなどが吐いたcsvだとコケるだろう
その辺をきっちりやりたければちゃんとしたcsvパーサーを書くか拾って来るかしなければならない

参考までに情報共有を目的とした(Infomationalな)RFC4180の日本語訳を置いておく。標準化された仕様ではないので他のツールがこれに準拠しているとは限らない事に注意
http://www.kasai.fm/wiki/rfc4180jp
0017名前は開発中のものです。2016/12/26(月) 13:06:11.89ID:oD/audhd
>>12
さん
>>5
です。
transformに変更と、
Input.GetAxis("Horizontal")に変更すればいいという事でしょうか?
まだまだ初心者で、Inputをどう変更すればいいかが分かりません。
どうすればいいのでしょうか・・・?



using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class move : MonoBehaviour
{


void Start()
{

}
void Update()
{
if (Input.GetAxis(KeyCode.DpadRight))//キーボード

{
transform.Rotate(Vector3.right * Time.deltaTime);
}
}
}
0018名前は開発中のものです。2016/12/26(月) 15:16:44.39ID:6fyqu+bl
Time.deltaTimeは一フレームの更新にかかった時間で、例えば60フレームだと1/60かけた事になる
そのプログラムでは一フレームあたりの回転の値がめちゃくちゃ小さすぎて回転してないように見えるのでは?
*100とか追加して、一度テストしてみ
0019名前は開発中のものです。2016/12/26(月) 16:03:06.10ID:T8JOgdFL
Input.GetAxisはキーボードとジョイスティックの入力によって-1 から 1 の範囲のfloatを返す。入力されていなければ0
どのキーやスティックがどの値に設定されているかはインプットマネージャから変更できる
https://docs.unity3d.com/ja/current/Manual/class-InputManager.html
だから加減速とか遅延追従を考えないならifなくしてこれでOK

transform.Rotate(Vector3.right * Input.GetAxis("Horizontal") * Time.deltaTime * speed);

※speedは回転速度のパラメータなのでクラスメンバとして以下の様に宣言してインスペクタから設定、単位は1秒間の回転角度(deg)、範囲は適宜修正

[SerializeField,Range(-360,360)]
float speed=60;
0020名前は開発中のものです。2016/12/27(火) 22:59:06.43ID:fgyv4Or+
コンパイルエラーが出てることもわからない初心者以前のゴミに
助言してるふりして気持ちいいか?お前ら
0021名前は開発中のものです。2016/12/30(金) 03:32:08.41ID:GA7tnL/X
GUIでCanvasの子オブジェクトの子オブジェクトで画面いっぱいに表示させるにはどうすればよいでしょうか。

Canvas
└testB(サイズ固定)
 └testC

とあったとして
testCを画面全体に表示させたく思っています。

RecttransformをstretchにしてLeft,Rigth,Top,Bottomをを0にしてもtestBのサイズに合うだけで困ってしまっています。
専用のスクリプトを作成するしか無いのでしょうか。
Componentなどで解決できる方法があったら教えていただきたいです。
0022名前は開発中のものです。2016/12/30(金) 11:43:29.83ID:zhYerI2D
>>21
普通でないことを普通でない方法でやろうとすれば難しいのは当たり前なので、普通のやり方をすればいいと思うよ

まず挙動に対してヒエラルキー構造が間違ってる
ヒエラルキーの親子関係はTransformの親子関係であるため、子にすれば親のTransformに影響されるのが普通
つまりtestBのTransformの影響を受けずに配置したいならtestCをtestBの子にせずにCanvas直下に置けばいい

ついでに言うならスクリプトを書くことを避けようとするのも間違ってる
何らかの理由で標準的な動きを無視したり追加する場合、スクリプトを書くのが普通
書く手間を削減するためにアセットを買ったりするという選択肢はあるが、これはスクリプトを読み書きできる奴が手間を減らすためにやる事だ
スクリプト書けないからとアセットに頼ってるとアセットの使い方がわからないとか使うためのスクリプトが書けないとかなって早晩挫折する
0023名前は開発中のものです。2017/01/05(木) 00:18:11.21ID:wicwV54V
>>21
Unityのヒエラルキーにおける親子関係は、Transformの親子関係なので、testBのTransformに異存したくないtestCをtestBの子にする事が間違い

もちろんスクリプトを書けば無理やり合わせる事は可能だが、全く無駄な処理なのでお勧め出来ない
0024名前は開発中のものです。2017/01/10(火) 16:23:40.24ID:27ZmTDPg
>>19
さん
返信遅れてもうしわけありません・・・。
そしてありがとうございます!
無事に回転するようになりました。
なのですが、←矢印で右に回転、→矢印で左に回転します。
どうしたら、修正できますでしょうか・・・。
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;



public class move : MonoBehaviour
{

[SerializeField, Range(-360, 360)]
float speed = 60;


void Start()
{


}
void Update()
{



{
transform.Rotate(Vector3.up * Input.GetAxis(
■ このスレッドは過去ログ倉庫に格納されています