通过遥感控制 Cube的移动

通过遥感控制 Cube的移动_第1张图片


这是在Unity中布局好的界面 通过左下的遥感控制中间的立方体的移动

在中间的image中添加组件Event Trigger,并且将脚本挂载到中间的image上,在组件Event Trigger中添加两个事件,Drag和EndDrag;

这两个事件分别是在拖动过程中调用,和拖动结束后调用


通过遥感控制 Cube的移动_第2张图片


using UnityEngine;

using System.Collections;using 

UnityEngine.UI;

public class YanganTest : MonoBehaviour

{    

Vector3 _selfStartPos;    

RectTransform _CurrPos;    

float radius = 100f;    

GameObject Player;        

void Start()    

{        

_CurrPos = transform.GetComponent();        //获取当前的RectTransform

_selfStartPos = transform.position;        //获取初始位置

GameObject PlayerP = Resources.Load("Cube") as GameObject;  //获取预设体      

Player = Instantiate(PlayerP, Vector3.zero, Quaternion.identity) as GameObject;        //将预设体创建到场景中

Player.AddComponent();  //为预设体添加CharacterController组件使其够更加方便的控制

}    

public void Drag()    //该方法在拖动时调用,方法名并没有规定

{        

if (Vector3.Distance(Input.mousePosition, _selfStartPos) <= radius) //如果鼠标距离初始位置小于半径       

{           

 transform.position = Input.mousePosition;        //使中间的image的位置等于鼠标位置

}    

}   

public void EndDrag()    //该方法在拖动结束后调用,方法名并没有规定

{       

 transform.position = _selfStartPos;   //拖动结束后使其归位

 }    

public void FixedUpdate()    //执行物理变化的函数,每一帧执行

{       

 if (Vector3.Distance(_CurrPos.position, _selfStartPos) >0)       //当中间的image被拖离初始位置时

 {            

float x = (Input.mousePosition - _selfStartPos).x;            //获取x坐标

float y = (Input.mousePosition - _selfStartPos).y;            //获取y坐标

Vector3 dir = new Vector3(x, 0,y);                        //初始化方向

Player.GetComponent().SimpleMove(dir * 5 *Time.deltaTime);//获取Player上的CharacterController组件,调用其中方法SimpleMove,这个方法的参数是一个三维向量,其中5是速度

}

}

}

你可能感兴趣的:(通过遥感控制 Cube的移动)