unity3D用鼠标和射线控制物体移动(二)
晋中职业技术学院 智祥明
创建4个Cube,分别命名为Cube0、Cube1、Cube2、Cube3,摆成一排。前面放一个小球,命名为Sphere。用鼠标单击Cube时,让Cube移到小球位置。当单击Cube0时,Cube0移到Sphere位置;当单击Cube1时,Cube1移到Sphere位置,Cube0移回原来位置;以此类推。
解答:
将Move脚本分别挂在Cube0、Cube1、Cube2、Cube3上,相当于创建了4个Move的实例对象。射线从摄像机发出,射到点击的屏幕位置。碰到Cube的Collider上。要分别进行交互,就要把Cube0、Cube1、Cube2、Cube3分别放到不同的层Layer上,所以要创建4个Layter层,分别对应各自的层。
要想让一个物体向Sphere移动时,其他物体回到原来位置。我们可以创建一个单例对象的脚本,命名为Only。单例对象就是一个公共的区域。因射线碰到的Collider不同,所以在单例中创建一个方法,参数传入Collider和layer层。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Only : MonoBehaviour {
public static Only instance;
public Collider collider;
void Awake()
{
instance = this;
}
public void Ray_Cube(Collider Cube_Collider ,LayerMask layer_Cube )
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit rayHit;
if (Physics.Raycast(ray, out rayHit, 500f, layer_Cube) && Input.GetMouseButton(0))
{
collider = rayHit.collider;
}
}
}
声明一个Collider的变量,用于存放碰到的Collider。
物体移动脚本如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour {
private Vector3 orign_Cube;
public LayerMask layer_Cube;
private Transform sphere;

void Awake()
{sphere = GameObject.Find("Sphere").GetComponent<Transform>();orign_Cube = gameObject.GetComponent<Transform>().position ;}
void Update () {Only .instance . Ray_Cube(gameObject.GetComponent<Collider>(),layer_Cube);if (Only.instance.collider  ==gameObject .GetComponent <Collider >()  ){gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, sphere.position, 0.2f);}if(Only.instance.collider != gameObject.GetComponent<Collider>())gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, orign_Cube, 0.2f);//print(Only.instance.collider);
}

}

unity3D用鼠标和射线控制物体移动(二)相关推荐

  1. Unity3d使用鼠标点击控制人物走动无效的问题

    Unity3d使用鼠标点击控制人物走动无效的问题 最近在自学Unity3d,在学到使用鼠标点击控制人物走动时,按照API上面将代码写好,如下: void Update () {// _clickLis ...

  2. Unity3D教程:用快捷键控制物体的激活状态

    Unity3D中我们在调试的时候,经常会把一些物体设置成未激活状态,如下图一样,但是当物体有子物体的时候总会有这个提示框,让后再去点这个框,总会觉的有些麻烦,以下快捷键就会很快实现这个功能: Unit ...

  3. Unity鼠标左键控制物体

    void update(){if (Input.GetMouseButtonDown(0)){print("按下了左键");}}

  4. Unity3d实现鼠标控制相机绕物体旋转(带阻尼)

    Unity3d实现鼠标控制相机绕物体旋转(带阻尼) 本来想的是用四元数实现球性插值实现阻尼效果,但是不知道四元数怎么绕定点旋转.因此用速度衰减的方法进行实现. 1.实现鼠标控制相机带阻尼旋转 2.实现 ...

  5. 【虚拟仿真】Unity3D中实现控制物体的旋转、移动、缩放

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...

  6. Unity3d 控制物体移动、旋转、缩放

    在Unity中通过利用 Input Manager(输入管理器)可以很简单的实现对一个物体进行移动.旋转.缩放操作. 演示代码: //通过虚拟轴控制物体移动.旋转.缩放 public class Mo ...

  7. unity3d用鼠标拖动物体的一段代码

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 这是一段拖动物体的代码,比较简洁明了,对了解uni ...

  8. Unity3D实践2:控制物体移动与旋转

    前文:https://blog.csdn.net/Jaihk662/article/details/86757037(Rigidbody物理类组件) https://blog.csdn.net/Jai ...

  9. 3d 数学(叉乘、四元素、四元素旋转、四元素和四元素相乘、鼠标控制物体旋转、发射子弹、环形发射子弹、子弹缓冲池)

    目录 1.叉乘 2.四元素 3.四元素旋转 4.四元素和四元素相乘 5.鼠标控制物体旋转 6.发射子弹 7.环形发射子弹 8.子弹缓冲池 1.叉乘 两个向量叉乘,得到一个新的向量,新向量跟原始两个向量 ...

  10. Unity3d 控制物体transform移动的几种方法

    在Unity开发中我们难免要使用代码控制角色的移动,现将已知的几种方法总结如下: 一.transform.Translate() function Translate (translation : V ...

最新文章

  1. ArcGIS中标注之一上下标、分数等特殊形式标注(转)
  2. idea目录后面有中括号
  3. DevExpress的分隔条控件SplitterControl的使用
  4. java table 内容居中_JTable内容居中显示 | 学步园
  5. python获取窗口控件属性_Python——tkinter窗口视窗的功能部件
  6. 内置模块--又称为常用模块
  7. EKF_SLAM一般过程
  8. 一个循环递归遍历问题
  9. win 平台上排名第二的下载工具——IDM
  10. 蓝牙连接测试系统软件,蓝牙测试软件官方版
  11. 【UML统一建模思想】2万字超详细学习笔记(2)
  12. shell脚本实现批量解析域名IP地址(支持多DNS)
  13. sklearn决策树--泰坦尼克号幸存者预测
  14. 网页视频倍速播放的方法
  15. 整车控制器(VCU)的功能
  16. Translatium for Mac(Google在线翻译工具)
  17. java英里转换成千米_公里和英里的换算?
  18. [原创] PS制作水笔
  19. 连连看连接算法Javascript版
  20. OO-Unit3-Summary

热门文章

  1. linux通过top和iostat查找io性能瓶颈
  2. 简繁体互换工具:opencc
  3. 最新Django经典面试问题与答案汇总
  4. 北京市公布533家接种点名单 (zz)
  5. 傅里叶级数与傅里叶变换_Part4_傅里叶级数的复数形式
  6. Java 接收OutLook 微软邮箱邮件
  7. 用计算机和电视机组成家庭影院,如何让我的电脑连上我的家庭影院?
  8. 制作双系统U盘启动盘【Ventoy】
  9. 互联网糖水营销策略-科学城篇
  10. Builder模式的误区