Slide 2
Slide 2 text
Unity for 2020.3.33f1 2022/04/18 株式会社ミクシィ
● magnitude計算コストは高い
● 代わりに、vector.srqMagnitude は平方根しない
● rigidbody.vector.srqMagnitude > maxspeed * maxspeed // 超過
● 速度制限以下ならrigidbody.AddForce()する
v. 遅延追従
● // 2点間を滑らかに移動するパターン
transform.position = Vector3.Lerp(startMarker.position, endMarker.position, volume);
● //目標地点まで等速で移動するパターン
transform.position = Vector3.MoveTowards(transform.position, newpos, speed)
vi. クリック2d座標の3d座標変換
// marker は任意3d object
var ray = CameraController.Instance.worldcamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit)) marker.transform.position = hit.point;
vii. 3d座標の2dpos変換
// 任意のRectTransform ui
// 3d表示中のcameraインスタンス
// 3d座標 position
ui.position = RectTransformUtility.WorldToScreenPoint(camera, position)
viii. 2つの3dオブジェクトをカメラ表示領域に自動で納めるカメラViewport Rect
var min3d = new Vector3(Mathf.Min(target[0].position.x, target[1].position.x), Mathf.Min(target[0].position.y, target[1].position.y));
var max3d = new Vector3(Mathf.Max(target[0].position.x, target[1].position.x), Mathf.Max(target[0].position.y, target[1].position.y));
var targetrect = Rect.MinMaxRect(min3d.x, min3d.y, max3d.x, max3d.y);
// rectにしておくとobject追加時にContains判定可能
var min = Camera.main.WorldToViewportPoint(targetrect.min);
var max = Camera.main.WorldToViewportPoint(targetrect.max);
var targetviewport = Rect.MinMaxRect(min.x, min.y, max.x, max.y);
© mixi, Inc. All rights reserved