如何在Unity的AR场景中仅缩放一个游戏对象?

时间:2019-07-29 18:46:50

标签: c# unity3d augmented-reality

所以我在场景中喜欢5个游戏对象,但是我只分别缩放了它们。但是,当我尝试执行此操作时,它们全部同时开始扩展。另外,我还有一个放置指示器,该指示器将用于实例化平面上的对象。似乎放置指示器不是对象本身,而是被缩放的指示器。我该如何解决?

我尝试停用展示位置指示器,但是没有用。

以下是实例化对象的代码:

我将obj数限制为5。 我使用此脚本而不是通常的“ PlaceonPlane”脚本。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.Experimental.XR;
using UnityEngine.UI;
using UnityEngine.XR.ARSubsystems;

public class ARTaptoPlaceObject : MonoBehaviour 
{
    private ARSessionOrigin arOrigin;
    GameObject spawnedobj;
    public GameObject placementIndicator;
    private ARRaycastManager arRaycast; 
    public Pose placementPose;
    public UIContoller sc; 
    public bool placementPoseIsValid = false;
    private int count;
    private string valu;
    string prefabs;

    void Start()
    {
        arOrigin = FindObjectOfType<ARSessionOrigin>();
        arRaycast = FindObjectOfType<ARRaycastManager>();
        count = 0;
    }

    // Update is called once per frame
    void Update()
    {
        UpdatePlacementPose();
        UpdatePlacementIndicator(); 

        for (var i = 0; i < Input.touchCount; ++i)
        {
            if (Input.GetTouch(i).phase == TouchPhase.Began)
            {
                if (placementPoseIsValid && Input.GetTouch(i).tapCount == 2)
                {
                    PlaceObject();
                }
            }
        }

    }

    public void PlaceObject()
    {
        if (count <= 4)
        {
            if (sc.objectToPlace != null)
            {
                spawnedobj = Instantiate(sc.objectToPlace, placementPose.position, placementPose.rotation);
                arOrigin.MakeContentAppearAt(spawnedobj.transform, spawnedobj.transform.position, spawnedobj.transform.rotation);
                count++;
            }

        }
        else
        {
                placementIndicator.SetActive(false); 
        }
    }

    private void UpdatePlacementIndicator()
    {
        if (placementPoseIsValid && count <= 4 && sc.active == false)
        {
            placementIndicator.SetActive(true);
            placementIndicator.transform.SetPositionAndRotation(placementPose.position, placementPose.rotation);
        }
        else
        {
            placementIndicator.SetActive(false); 
        }
    }
    private void UpdatePlacementPose()
    {
        var screenCenter = Camera.current.ViewportToScreenPoint(new Vector3(0.5f, 0.5f));
        var hits = new List<ARRaycastHit>();
        arRaycast.Raycast(screenCenter, hits, UnityEngine.XR.ARSubsystems.TrackableType.Planes);
        placementPoseIsValid = hits.Count > 0;
        if (placementPoseIsValid)
        {
            placementPose = hits[0].pose;

            var cameraForward = Camera.current.transform.forward;
            var cameraBearing = new Vector3(cameraForward.x, 0, cameraForward.z).normalized;
            placementPose.rotation = Quaternion.LookRotation(cameraBearing);

        }
    }

}

,这是附加到用于缩放对象的按钮的Scaler脚本。

public class Scaler : MonoBehaviour
{
    public UIContoller uc;
    public ARTaptoPlaceObject ap; 
    private GameObject ReferenceToScale;

    public void OnValueChange()
    {
        ReferenceToScale = (UnityEngine.GameObject)Resources.Load(uc.s_count, typeof(GameObject));
        Vector3 t = ReferenceToScale.transform.localScale;

        Vector3 scaleValue = t * 1.1f;

        ReferenceToScale.transform.localScale = scaleValue;
    }

“ objectToPlace”本身也位于“ UI.Controller”脚本中,因为当它位于“ ARTaptoPlace”脚本中时,我无法在场景中查看它

0 个答案:

没有答案