Position, Rotation, Scale

Движение UI элемента за 3Д объектом

using UnityEngine;

public class im : MonoBehaviour
{
public Transform Cube;
public Camera MyCamera;

void Update()
{
transform.position = MyCamera.WorldToScreenPoint(Cube.position);
}
}

Плавное перемещение объекта из точки начальной локации в координаты указанного объекта. Скорость перемещения определяется переменной smoothing:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class swim : MonoBehaviour

{
public Transform point; 
Vector3 destinationPoint;
public float smoothing = 1f;

void Update()
{
//Плавное "скольжение" из одной точки в другую
transform.position = Vector3.Lerp (transform.position, point.transform.position, smoothing * Time.deltaTime);
}
}

таскать 3Д объект указателем мыши или свайпом

using UnityEngine;

public class Drager : MonoBehaviour
{
    Vector3 mOfset;
    float ZCoord;
   
    
    void OnMouseDown()
    {
        ZCoord = Camera.main.WorldToScreenPoint(gameObject.transform.position).z;
        mOfset = gameObject.transform.position - GetMouseWorldPos();
    }

   private Vector3 GetMouseWorldPos()
    {
        Vector3 MousePoint = Input.mousePosition;
        MousePoint.z = ZCoord;
        return Camera.main.ScreenToWorldPoint(MousePoint);
    }
    void OnMouseDrag()
    {
        transform.position = new Vector3((GetMouseWorldPos() + mOfset).x, 50, (GetMouseWorldPos() + mOfset).z);
    }
}

элегантный способ двигать объект)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;

public class go : MonoBehaviour
{
void Update()
    {
       if (Input.GetKey(KeyCode.LeftArrow)) transform.Translate(-Time.deltaTime * 5, 0, 0);
       if (Input.GetKey(KeyCode.RightArrow)) transform.Translate(Time.deltaTime * 5, 0, 0);
       if (Input.GetKey(KeyCode.UpArrow)) transform.Translate( 0, 0, Time.deltaTime*5);
       if (Input.GetKey(KeyCode.DownArrow)) transform.Translate(0, 0, -Time.deltaTime * 5);

    }
}

перемещение объекта с помощью датчика акселерометра мобильного телефона:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class gyroscope : MonoBehaviour
{
   
    float speed = 5.0f;

    void Update()
    {
        Vector3 dir = Vector3.zero;

      
        dir.x = Input.acceleration.x;
        dir.z = Input.acceleration.y;

        if (dir.sqrMagnitude > 1)
        {
            dir.Normalize();
        }
        
        dir *= Time.deltaTime;
        transform.Translate(dir * speed);
    }

}

Движение объекта за курсором указателя мыши:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cursorfollow : MonoBehaviour
{
    
    void Start()
    {
        Cursor.visible = false; //делаем указатель мыши невидимым
    }

   
    void Update()
    {
        Vector2 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition); //определяем координаты указателя мыши
		transform.position = pos; //перемещаем объект в координаты указателя мыши
    }
}

событие Touch (андройд)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class touchscreen : MonoBehaviour
{

    void Update()
    {
        if(Input.touchCount > 0)
        {  
GetComponent<Rigidbody2D>().AddForce(transform.up * 2, ForceMode2D.Impulse);

        }

   

    }
}

швырнуть объект вперед на старте:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class polet : MonoBehaviour
{
    Rigidbody rig;

    void Start()
    {
        rig = GetComponent<Rigidbody>();
        rig.AddForce(transform.forward * 1000);
    }

}

Управление движением объекта в точку клика мышью или touch по экрану мобилки через компонент NavMesh (реакция на клик только при клике по коллайдеру):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class PlayerController : MonoBehaviour
{

    private NavMeshAgent agent;
    public Camera camera; 
    public GameObject LegoMan;
    public Vector3 touchWayBegin; // вектор, начальной точки персонажа
    Vector3 touchWayEnd;      // вектор конечнгой точки персонажа
    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        touchWayEnd = transform.position;
    }

   
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
          
          RaycastHit hit;
            if (Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), out hit))
            {
             
                agent.SetDestination(hit.point);
               touchWayEnd = hit.point;    
            }
           
        }
      touchWayBegin = transform.position - touchWayEnd;  //вектор пройденного расстояния 
    }
}

Свайп контроллер андройд:

В зависимости от направления свайпа переменные swipeLeft, swipeRight, swipeUp, swipeDown принимают значение «true», в скрипте управляемого объекта объявляется переменная public Swipe swipeControls, таким образом объекту можно сообщать о напралении свайпа и создавать реакции.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Swipe : MonoBehaviour
{
    private bool tap, swipeLeft, swipeRight, swipeUp, swipeDown;
    private Vector2 startTouch, swipeDelta;
    public bool isDraging = false;

    public Vector2 SwipeDelta { get { return swipeDelta; } }
    public bool SwipeLeft { get { return swipeLeft; } }
    public bool SwipeRight { get { return swipeRight; } }
    public bool SwipeDown { get { return swipeDown; } }
    public bool SwipeUp { get { return swipeUp; } } 
    void Update()
    {
        tap = swipeLeft = swipeRight = swipeUp = swipeDown = false;
       
        #region Srandelon Inputs
        if(Input.GetMouseButtonDown(0))
        {
            tap = true;
            isDraging = true;
            startTouch = Input.mousePosition;

        }
        else if (Input.GetMouseButtonUp(0))
        {
            isDraging = false;
            Reset();
        }
        #endregion

        #region MobileInputs
        if(Input.touches.Length > 0)
            if(Input.touches[0].phase == TouchPhase.Began)
            {
                isDraging = true;
                tap = true;
                startTouch = Input.touches[0].position;
            }
        else if (Input.touches[0].phase == TouchPhase.Ended|| Input.touches[0].phase == TouchPhase.Canceled)
            {
                isDraging = false;
                Reset();
            }
        #endregion

        swipeDelta  = Vector2.zero;

        if (isDraging)
        {
            if (Input.touches.Length > 0)
            {
                swipeDelta = Input.touches[0].position - startTouch;
            }
            else
                  if (Input.GetMouseButton(0))
            {
                swipeDelta = (Vector2)Input.mousePosition - startTouch;
            }

            if (swipeDelta.magnitude > 125)
            {
                float x = swipeDelta.x;
                float y = swipeDelta.y;

                if (Mathf.Abs(x) > Mathf.Abs(y))
                {
                    //лево или право
                    if (x < 0)
                    {
                        swipeLeft = true;
                    }
                    else
                    {
                        swipeRight = true;
                    }
                }
                else
                {
                    //вверх вниз
                    if (y < 0)
                    {
                        swipeDown = true;
                    }
                    else
                    {
                        swipeUp = true;
                    }

                }
                Reset();
            }

        }
    }

    private void Reset()
    {
        startTouch = swipeDelta = Vector2.zero;
        isDraging = false;
    }

}

реакции на свайп:

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

public class SwipeTest : MonoBehaviour
{
    AudioSource audio;
    public AudioClip touch;
    public AudioClip swipe;
    public Swipe swipeControls;
    public Transform player;
    private Vector3 desiredPosition;
    public GameObject Cubik;
    float targetAngleLeft = 92f; // Угол на который надо повернуться
    float targetAngleRight = -92f; // Угол на который надо повернуться
    float targetAngleUp = 92f; // Угол на который надо повернуться
    float targetAngleDown = -92f; // Угол на который надо повернуться
    float angleLeft;
    float angleUp;
    public bool left = false;
    bool right = false;
    bool Up = false;
    bool Down = false;
    public GameObject[] lego;
   public int numberDetal = 1;
    public int numberImage = 0;

    public Image image;
    public Sprite[] detal;

    void Start()
    {
        audio = GetComponent<AudioSource>();
        for(int i = 0; i<lego.Length; i++)
        {
            lego[i].SetActive(false);
        }


    }

    public void legoplus()
    {
        if (numberDetal < lego.Length || numberDetal == lego.Length)
        {
            lego[numberDetal - 1].SetActive(true);
            image.sprite = detal[numberImage + 1];
            numberDetal++;
            numberImage++;
            audio.clip = touch;
            audio.Play();
        }

    }
 
    public void legominus()
    {
        if (numberDetal > 0 )
        {
           
                lego[numberDetal-2].SetActive(false);
        

            image.sprite = detal[numberImage-1];
            numberDetal--;
            numberImage--;
            audio.clip = touch;
            audio.Play();
        }
    }

    public void vihod()
    {
        audio.clip = touch;
        audio.Play();
        Application.Quit();
    }

    void Update()
    {


        if (swipeControls.SwipeLeft)
        // desiredPosition += Vector3.left;
        if(right==Down==Up ==false)
        {
                audio.clip = swipe;
                audio.Play();
                left = true;
        }
        if (swipeControls.SwipeRight)
            // desiredPosition += Vector3.right;
            if (left == Down == Up == false)
            {
                audio.clip = swipe;
                audio.Play();
                right = true;
            }
        if (swipeControls.SwipeUp)
            if (left == right == Down == false)
            {
                audio.clip = swipe;
                audio.Play();
                Up = true;
            }
        //  desiredPosition += Vector3.forward;
        if (swipeControls.SwipeDown)
            // desiredPosition += Vector3.back;
            if (left == right == Up == false)
            {
                audio.clip = swipe;
                audio.Play();
                Down = true;
            }
        

        if (left)
        {
            angleLeft = Mathf.LerpAngle(angleLeft, targetAngleLeft, Time.deltaTime*20);
            if (angleLeft > targetAngleLeft - 2)
            {
                left = false;
                targetAngleLeft = targetAngleLeft + 90;
                targetAngleRight = targetAngleRight +90;

            }

        }

      



        if (right)
        {
            angleLeft = Mathf.LerpAngle(angleLeft, targetAngleRight, Time.deltaTime*20);
            if (angleLeft < targetAngleRight + 2)
            {
                right = false;
                targetAngleRight = targetAngleRight - 90;
                targetAngleLeft = targetAngleLeft - 90;

            }

        }


        if (Up)
        {
            angleUp = Mathf.LerpAngle(angleUp, targetAngleUp, Time.deltaTime*20);
            if (angleUp > targetAngleUp - 2)
            {
                Up = false;
                targetAngleUp = targetAngleUp + 90;
                targetAngleDown = targetAngleDown + 90;

            }

        }


        if (Down)
        {
            angleUp = Mathf.LerpAngle(angleUp, targetAngleDown, Time.deltaTime*20);
            if (angleUp < targetAngleDown + 2)
            {
                Down = false;
                targetAngleUp = targetAngleUp - 90;
                targetAngleDown = targetAngleDown - 90;

            }

        }
        //player.transform.position = Vector3.MoveTowards(player.transform.position, desiredPosition, 1f * Time.deltaTime);

        Cubik.transform.rotation = Quaternion.Euler(angleUp, 0, angleLeft);

    }
}