这是在Unity中布局好的界面 通过左下的遥感控制中间的立方体的移动
在中间的image中添加组件Event Trigger,并且将脚本挂载到中间的image上,在组件Event Trigger中添加两个事件,Drag和EndDrag;
这两个事件分别是在拖动过程中调用,和拖动结束后调用
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>(); //获取当前的RectTransform
_selfStartPos = transform.position; //获取初始位置
GameObject PlayerP = Resources.Load("Cube") as GameObject; //获取预设体
Player = Instantiate(PlayerP, Vector3.zero, Quaternion.identity) as GameObject; //将预设体创建到场景中
Player.AddComponent<CharacterController>(); //为预设体添加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<CharacterController>().SimpleMove(dir * 5 *Time.deltaTime);//获取Player上的CharacterController组件,调用其中方法SimpleMove,这个方法的参数是一个三维向量,其中5是速度
}
}
}
网友评论