//tips
//SampleScene修正
Sampleオブジェクトのランダム移動を考える。
参考で下記のような一秒ごとにランダムにx値が変わるcubeの挙動を作成した。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TPGameManager : MonoBehaviour
{
private float time;
void Update()
{
time -= Time.deltaTime;
if (time <= 0.0f)
{
// transformを取得
Transform myTransform = this.transform;
// 座標を取得
Vector3 pos = myTransform.position;
pos.x = Random.Range(-2f, 2f); // x座標
pos.y = 3f; // y座標
pos.z = 0f; // z座標
myTransform.position = pos; // 座標を設定
//Instantiate(this.gameObject, new Vector3(-40, vecY, 30), Quaternion.identity);
time = 1.0f;
}
}
}
この内容をtimeの制限を取り払いスタート時点でのポジション移動が発生するようなスクリプトに変更してSampleオブジェクトにアタッチする。
Plane上でplayerは確実に生成されているがplaneをなぜかすり抜けてしまうようになっている。
親オブジェクトのSampleオブジェクトにColliderとRigidbodyを設定しても効果なく、Rigidbodyの衝突判定をContinuousDynamic「連続的かつ動的」にしたが止めることはできなかった。
今まで発生しなかった現象なのでSampleオブジェクトの初期座標のy値を高めに設定すると問題はは解決した。コライダーやランダム生成のスクリプトははずしても問題なかった。
ただ、photonviewのPhotonTransformViewがうまく機能しておらず、ずっと上下運動を繰り返している。座標設定はStartメソッドで呼び出されるためそれ以降の上方向への移動は他のスクリプトでは設定していないので、なぜ同期の際にyの値の処理がうまくいっていないのか理解する必要がある。
基本的なオブジェクトの移動はGamePlayerスクリプトの下記で表現されており、xとzの2方向への数値変更のみ扱うようにしている。
if (photonView.IsMine)
{
var direction = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical")).normalized;
var dv = 6f * Time.deltaTime * direction;
transform.Translate(dv.x, 0f, dv.y);
}
}
Photonの落下の同期について別途調べる。
//UI表示確認
再生シーンでPrefabオブジェクトを確認すると、オブジェクトの親に、オブジェクト内のcanvasとは別のEnvironment canvasというものが作成されていることがわかった。これはUnity2018.3から仕様が大きく代わったプレハブモードが要因とのこと。
これで数値が大きくずれているので、Environment canvasの値を参照しないように変更を加える必要がある。
Prefab Modeを開いた状態で Edit > Project Settings > Editor > Prefab Editing Environments でTestシーンを設定してみたが特に直る事はなかった。
下記を参考にしてEditing Environmentについて調査中。
https://qiita.com/piti5/items/525fc69148d59c9d7b06
https://docs.unity3d.com/ja/2018.4/Manual/EditingInPrefabMode.html